Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
En plus des boutons push standard, une barre d’outils peut également avoir des boutons déroulants. Un bouton déroulant est généralement indiqué par la présence d’une flèche vers le bas attachée.
Remarque
La flèche vers le bas attachée s’affiche uniquement si le style étendu 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 TBN_DROPDOWN est envoyé au parent du contrôle de barre d’outils. Vous pouvez ensuite gérer cette notification et afficher un menu contextuel ; similaire au comportement d’Internet Explorer.
La procédure suivante montre comment implémenter un bouton de barre d’outils déroulant avec un menu contextuel :
Pour implémenter un bouton déroulant
Une fois votre
CToolBarCtrlobjet créé, définissez le style de TBSTYLE_EX_DRAWDDARROWS à l’aide du code suivant :m_ToolBarCtrl.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);Définissez le style TBSTYLE_DROPDOWN pour les nouveaux boutons (InsertButton ou AddButtons) ou existants (SetButtonInfo) qui seront des boutons déroulants. L’exemple suivant illustre la modification d’un bouton existant dans un
CToolBarCtrlobjet :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 TBN_DROPDOWN à la classe parente de l’objet de barre d’outils.
ON_NOTIFY(TBN_DROPDOWN, IDC_TOOLBAR1, &CMyDialog::OnTbnDropDownToolBar1)Dans le nouveau 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; }