Usando botões pendente em um controle de barra de ferramentas
Juntamente com 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_DRAWDARROWS estilo estendido foi conjunto. |
Quando o usuário clica nessa seta (ou no próprio, botão), se nenhuma seta estiver presente um TBN_DROPDOWN mensagem de notificação é enviada para o pai do controle de barra de ferramentas.Você pode tratar 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 da lista suspensa com um menu pop-up:
Uma vez o CToolBarCtrl objeto foi criado, defina o TBSTYLE_EX_DRAWDDARROWS estilo, usando o seguinte código:
m_ToolBarCtrl.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
conjunto o TBSTYLE_DROPDOWN estilo para qualquer novo (InsertButton or AddButtons) ou existente (SetButtonInfo) botões que serão botões suspensos.O exemplo a seguir demonstra como 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 para a 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 apropriada.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; }