À l'aide de les boutons déroulants dans un contrôle de barre d'outils
En plus de les boutons de commande standard, une barre d'outils peut également avoir des boutons de liste déroulante.Un bouton de liste déroulante est généralement indiqué par la présence d'une flèche bas jointe.
[!REMARQUE]
La flèche bas attachée s'affiche uniquement si le style étendu par TBSTYLE_EX_DRAWDDARROWS a été défini.
Lorsque l'utilisateur clique sur cette flèche (ou le bouton lui-même, si aucune flèche n'est présente), un message de notification d' TBN_DROPDOWN est envoyé au parent du contrôle de barre d'outils.Vous pouvez ensuite traiter cette notification et afficher un menu contextuel ; semblable au comportement d'Internet Explorer.
La procédure suivante montre comment implémenter un bouton déroulant de barre d'outils avec un menu contextuel :
Pour implémenter un bouton déroulant
Une fois que votre objet d' CToolBarCtrl a été créé, définissez le style d' TBSTYLE_EX_DRAWDDARROWS , à l'aide de le code suivant :
m_ToolBarCtrl.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
Définissez le style d' TBSTYLE_DROPDOWN pour tout nouveau (InsertButton ou AddButtons) ou exister les boutons (deSetButtonInfo) qui seront des boutons de liste déroulante.l'exemple suivant montre modifier un bouton existant dans un objet d' 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);
Ajoutez un gestionnaire d' TBN_DROPDOWN à la classe parente de l'objet barre d'outils.
ON_NOTIFY(TBN_DROPDOWN, IDC_TOOLBAR1, &CMyDialog::OnTbnDropDownToolBar1)
Dans le gestionnaire, affichez le menu contextuel approprié.Le code suivant illustre une méthode :
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; }