Partilhar via


Usando botões suspensos em um controle barra de ferramentas

Além botões de ação padrão, uma barra de ferramentas também pode ter botões suspensos.Um botão suspenso normalmente é indicado pela presença de uma seta anexada para baixo.

ObservaçãoObservação

Seta anexada para baixo aparecerá somente se o TBSTYLE_EX_DRAWDDARROWS estilo estendido foi definido.

Quando o usuário clica na seta (ou próprio, botão), se não houver nenhuma seta um TBN_DROPDOWN mensagem de notificação é enviada para o pai do controle da barra de ferramentas.Você pode manipular esta notificação e exibir um menu pop-up; semelhante ao comportamento do Internet Explorer.

O procedimento a seguir ilustra como implementar um botão drop-down com um menu pop-up:

Para implementar um botão drop-down

  1. Uma vez o CToolBarCtrl objeto foi criado, defina o TBSTYLE_EX_DRAWDDARROWS de estilo, usando o seguinte código:

    m_ToolBarCtrl.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
    
  2. Definir o TBSTYLE_DROPDOWN estilo para qualquer novo (InsertButton ou AddButtons) ou existentes (SetButtonInfo) botões que serão botões suspensos.O exemplo a seguir demonstra a modificar um botão existente em um CToolBarCtrl objeto:

    TBBUTTONINFO tbi;
    
    tbi.dwMask = TBIF_STYLE;
    tbi.cbSize = sizeof(TBBUTTONINFO);
    m_ToolBarCtrl.GetButtonInfo(0, &tbi);
    tbi.fsStyle |= TBSTYLE_DROPDOWN;
    m_ToolBarCtrl.SetButtonInfo(0, &tbi);
    
  3. Adicionar um TBN_DROPDOWN manipulador de classe pai do objeto de barra de ferramentas.

    ON_NOTIFY(TBN_DROPDOWN, IDC_TOOLBAR1, &CMyDialog::OnTbnDropDownToolBar1)
    
  4. No manipulador de novo, exiba o menu pop-up apropriado.O código a seguir demonstra um método:

    void CMyDialog::OnTbnDropDownToolBar1(NMHDR* pNMHDR, LRESULT* pResult)
    {
       LPNMTOOLBAR pToolBar = reinterpret_cast<LPNMTOOLBAR>(pNMHDR);
       ClientToScreen(&(pToolBar->rcButton)); // TrackPopupMenu uses screen coords
    
       CMenu menu;
       VERIFY(menu.LoadMenu(IDR_MENU1));
       CMenu* pPopup = menu.GetSubMenu(0);
       if (NULL != pPopup)
       {
          pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, 
             pToolBar->rcButton.left, pToolBar->rcButton.bottom, this);
       }
    
       *pResult = 0;
    }
    

Consulte também

Referência

Usando CToolBarCtrl

Conceitos

Controles (MFC)