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 botões suspensos. Um botão suspenso geralmente é indicado pela presença de uma seta para baixo anexada.
Observação
A seta para baixo anexada será exibida somente se o estilo estendido TBSTYLE_EX_DRAWDDARROWS tiver sido definido.
Quando o usuário clica nessa seta (ou no próprio botão, se nenhuma seta estiver presente), uma mensagem de notificação TBN_DROPDOWN é enviada para o pai do controle da barra de ferramentas. Em seguida, você pode manipular essa notificação e exibir um menu pop-up; semelhante ao comportamento do Internet Explorer.
O procedimento a seguir ilustra como implementar um botão de barra de ferramentas suspenso com um menu pop-up:
Para implementar um botão suspenso
Depois que o objeto
CToolBarCtrl
tiver sido criado, defina o estilo TBSTYLE_EX_DRAWDDARROWS usando o seguinte código:m_ToolBarCtrl.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
Defina o estilo TBSTYLE_DROPDOWN para qualquer botão novo (InsertButton ou AddButtons) ou existente (SetButtonInfo) que será um botão suspenso. O exemplo a seguir demonstra a modificação de um botão existente em um objeto
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);
Adicione um manipulador TBN_DROPDOWN à classe pai do objeto da barra de ferramentas.
ON_NOTIFY(TBN_DROPDOWN, IDC_TOOLBAR1, &CMyDialog::OnTbnDropDownToolBar1)
No novo manipulador, 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; }