Freigeben über


Behandeln von Dropdownschaltflächen

Eine Dropdownschaltfläche kann Benutzern eine Liste mit Optionen anzeigen. Um diesen Schaltflächenstil zu erstellen, geben Sie die BTNS_DROPDOWN-Format an (aus Kompatibilität mit früheren Versionen der allgemeinen Steuerelemente auch als TBSTYLE_DROPDOWN bezeichnet). Um eine Dropdownschaltfläche mit einem Pfeil anzuzeigen, müssen Sie auch die TBSTYLE_EX_DRAWDDARROWS Symbolleistenformat festlegen, indem Sie eine TB_SETEXTENDEDSTYLE Nachricht senden.

Die folgende Abbildung zeigt eine Dropdownschaltfläche "Öffnen", in der das Kontextmenü geöffnet ist und eine Liste der Dateien zeigt. In diesem Beispiel weist die Symbolleiste das format TBSTYLE_EX_DRAWDDARROWS auf.

Screenshot eines Dialogfelds mit drei Symbolleistenelementen, die durch Symbole dargestellt werden; eine verfügt über einen erweiterten Dropdownpfeil und ein Kontextmenü mit drei Elementen

Die folgende Abbildung zeigt dieselbe Symbolleiste, diesmal ohne TBSTYLE_EX_DRAWDDARROWS Stil.

Screenshot eines vorherigen Dialogfelds, aber das Symbol mit dem Kontextmenü enthält keinen Dropdownpfeil

Wenn Benutzer auf eine Symbolleistenschaltfläche klicken, die die BTNS_DROPDOWN-Format verwendet, sendet das Symbolleistensteuerelement dem übergeordneten Fenster einen TBN_DROPDOWN Benachrichtigungscode.

Wichtige Informationen

Technologien

Voraussetzungen

  • C/C++
  • Programmierung der Windows-Benutzeroberfläche

Anweisungen

Behandeln einer Dropdownschaltfläche

Im folgenden Codebeispiel wird veranschaulicht, wie eine Anwendung eine Dropdownschaltfläche in einem Symbolleistensteuerelement unterstützen kann.

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

Verwenden von Symbolleistensteuerelementen

Demo allgemeiner Windows-Steuerelemente (CppWindowsCommonControls)