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
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);
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);
Adicionar um manipulador de TBN_DROPDOWN a classe pai do objeto da barra de ferramentas.
ON_NOTIFY(TBN_DROPDOWN, IDC_TOOLBAR1, &CMyDialog::OnTbnDropDownToolBar1)
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; }