À l'aide de les boutons de liste déroulante dans un contrôle de barre d'outils
Outre les boutons de commande standard, une barre d'outils peut également avoir des boutons déroulants. Un bouton de liste déroulante est généralement désigné par la présence d'une flèche orientée vers le bas.
Notes
La flèche vers le bas apparaît uniquement si le style TBSTYLE_EX_DRAWDDARROWS étendu 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 de TBN_DROPDOWN est envoyé au parent du contrôle de barre d'outils. Vous pouvez ensuite traiter la notification et afficher un menu contextuel ; semblable au comportement d'Internet Explorer.
La procédure suivante montre comment implémenter un bouton de la barre d'outils dans un menu contextuel :
Pour implémenter un bouton de liste déroulante
Une fois que votre objet deCToolBarCtrl a été créé, définissez le style de TBSTYLE_EX_DRAWDDARROWS, en utilisant le code suivant :
m_ToolBarCtrl.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
Définir le style de TBSTYLE_DROPDOWN pour chaque bouton nouveau (InsertButton ou AddButtons) ou déjà existant (SetButtonInfo) qui seront des boutons déroulants. L'exemple suivant illustre la modification d'un bouton existant dans un objet 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);
Ajoutez un gestionnaire de TBN_DROPDOWN à la classe parente de l'objet barre d'outils.
ON_NOTIFY(TBN_DROPDOWN, IDC_TOOLBAR1, &CMyDialog::OnTbnDropDownToolBar1)
Dans le gestionnaire, afficher le menu contextuel approprié. L'exemple de code suivant montre un appel de 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; }