Mediante los botones desplegables en un control toolbar
Además de los botones de comando estándar, una barra de herramientas también puede tener botones desplegables.Un botón desplegable indica normalmente por la presencia de una flecha abajo asociada.
[!NOTA]
La flecha abajo asociada sólo aparecerá si extendidas se ha establecido TBSTYLE_EX_DRAWDDARROWS estilo.
Cuando el usuario hace clic en esta flecha (o el botón propio, si no hay ninguna flecha existe), un mensaje de notificación de TBN_DROPDOWN se envía al elemento primario del control de barra de herramientas.Puede controlar esta notificación y mostrar un menú emergente; similar al comportamiento de Internet Explorer.
El procedimiento siguiente muestra cómo implementar un botón de la barra de herramientas desplegable con un menú emergente:
Para implementar un botón desplegable
Una vez creado el objeto de CToolBarCtrl , establezca el estilo de TBSTYLE_EX_DRAWDDARROWS , mediante el código siguiente:
m_ToolBarCtrl.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
Establezca el estilo de TBSTYLE_DROPDOWN para cualquier botón nuevo (InsertButton o AddButtons) o existente (deSetButtonInfo) que tiene botones desplegables.El ejemplo siguiente se muestra la modificación de un botón existente en un 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);
Agregue un controlador de TBN_DROPDOWN a la clase primaria del objeto de la barra de herramientas.
ON_NOTIFY(TBN_DROPDOWN, IDC_TOOLBAR1, &CMyDialog::OnTbnDropDownToolBar1)
En el nuevo controlador, muestre el menú emergente adecuado.El código siguiente muestra un 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; }