Partager via


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 .

capture d’écran d’une boîte de dialogue avec trois éléments de barre d’outils représentés par des icônes ; l’un a une flèche de liste déroulante développée et un menu contextuel à trois éléments

L’illustration suivante montre la même barre d’outils, cette fois sans le style TBSTYLE_EX_DRAWDDARROWS .

capture d’écran d’une boîte de dialogue précédente, mais l’icône avec le menu contextuel n’a pas de flèche déroulante

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;
}

Utilisation des contrôles de barre d’outils

Démonstration des contrôles communs Windows (CppWindowsCommonControls)