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