Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Además de los botones de pulsación estándar, una barra de herramientas también puede tener botones desplegables. Normalmente, un botón desplegable se indica mediante la presencia de una flecha hacia abajo adjunta.
Nota:
La flecha hacia abajo adjunta solo aparecerá si se ha establecido el TBSTYLE_EX_DRAWDDARROWS estilo extendido.
Cuando el usuario hace clic en esta flecha (o en el propio botón, si no hay ninguna flecha), se envía un mensaje de notificación TBN_DROPDOWN al elemento primario del control de barra de herramientas. A continuación, puede controlar esta notificación y mostrar un menú emergente; similar al comportamiento de Internet Explorer.
En el procedimiento siguiente se muestra cómo implementar un botón de barra de herramientas desplegable con un menú emergente:
Para implementar un botón desplegable
CToolBarCtrlUna vez creado el objeto, establezca el estilo TBSTYLE_EX_DRAWDDARROWS con el código siguiente:m_ToolBarCtrl.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);Establezca el estilo de TBSTYLE_DROPDOWN para los botones nuevos (InsertButton o AddButtons) o existentes (SetButtonInfo) que serán botones desplegables. En el ejemplo siguiente se muestra cómo modificar un botón existente en un
CToolBarCtrlobjeto :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 TBN_DROPDOWN a la clase primaria del objeto de 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; }