Partilhar via


Usando botões suspensos em um controle de barra de ferramentas

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

Dica

A seta para baixo anexado será exibida somente se o estilo TBSTYLE_EX_DRAWDDARROWS estendido foi definido.

Quando o usuário clicar nessa seta (ou o botão próprio, se nenhuma seta estiver presente), uma notificação de TBN_DROPDOWN é enviada ao pai do controle da barra de ferramentas. Você pode controlar essa notificação e exibir um menu suspenso; semelhante ao comportamento do Internet Explorer.

O procedimento a seguir explica como implementar um botão da barra de ferramentas lista suspensa com um menu pop-up:

Para implementar um botão suspenso

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

    m_ToolBarCtrl.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
    
  2. Definir o estilo de TBSTYLE_DROPDOWN para todos os novosInsertButton (ou AddButtons) ou existentes (botões deSetButtonInfo) que sejam botões suspensos. O exemplo a seguir demonstra a alteração de um botão existente em um objeto de CToolBarCtrl :

    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 manipulador de TBN_DROPDOWN a classe pai do objeto da barra de ferramentas.

    ON_NOTIFY(TBN_DROPDOWN, IDC_TOOLBAR1, &CMyDialog::OnTbnDropDownToolBar1)
    
  4. No novo manipulador, exibir 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)