Comment gérer les boutons déroulants
Un bouton déroulant peut présenter aux utilisateurs une liste d’options. Pour créer ce style de bouton, spécifiez le style BTNS_DROPDOWN (également appelé TBSTYLE_DROPDOWN pour la compatibilité avec les versions précédentes des contrôles courants). Pour afficher un bouton déroulant avec une flèche, vous devez également définir le style de barre d’outils TBSTYLE_EX_DRAWDDARROWS en envoyant un message TB_SETEXTENDEDSTYLE .
L’illustration suivante montre un bouton déroulant « Ouvrir » avec le menu contextuel ouvert et une liste de fichiers. Dans cet exemple, la barre d’outils a le style TBSTYLE_EX_DRAWDDARROWS .
L’illustration suivante montre la même barre d’outils, cette fois sans le style TBSTYLE_EX_DRAWDDARROWS .
Lorsque les utilisateurs cliquent sur un bouton de barre d’outils qui utilise le style BTNS_DROPDOWN , le contrôle barre d’outils envoie à sa fenêtre parente un TBN_DROPDOWN code de notification.
Bon à savoir
Technologies
Prérequis
- C/C++
- Programmation de l’interface utilisateur Windows
Instructions
Gérer un bouton déroulant
L’exemple de code suivant montre comment une application peut prendre en charge un bouton déroulant dans un contrôle de barre d’outils.
BOOL DoNotify(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
#define lpnm ((LPNMHDR)lParam)
#define lpnmTB ((LPNMTOOLBAR)lParam)
switch(lpnm->code)
{
case TBN_DROPDOWN:
{
// Get the coordinates of the button.
RECT rc;
SendMessage(lpnmTB->hdr.hwndFrom, TB_GETRECT, (WPARAM)lpnmTB->iItem, (LPARAM)&rc);
// Convert to screen coordinates.
MapWindowPoints(lpnmTB->hdr.hwndFrom, HWND_DESKTOP, (LPPOINT)&rc, 2);
// Get the menu.
HMENU hMenuLoaded = LoadMenu(g_hinst, MAKEINTRESOURCE(IDR_POPUP));
// Get the submenu for the first menu item.
HMENU hPopupMenu = GetSubMenu(hMenuLoaded, 0);
// Set up the pop-up menu.
// In case the toolbar is too close to the bottom of the screen,
// set rcExclude equal to the button rectangle and the menu will appear above
// the button, and not below it.
TPMPARAMS tpm;
tpm.cbSize = sizeof(TPMPARAMS);
tpm.rcExclude = rc;
// Show the menu and wait for input.
// If the user selects an item, its WM_COMMAND is sent.
TrackPopupMenuEx(hPopupMenu,
TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL,
rc.left, rc.bottom, g_hwndMain, &tpm);
DestroyMenu(hMenuLoaded);
return (FALSE);
}
}
return FALSE;
}
Rubriques connexes