Freigeben über


So behandeln Sie die BCN_DROPDOWN Benachrichtigung über eine geteilte Schaltfläche

In diesem Thema wird eine mögliche Möglichkeit zum Reagieren auf die BCN_DROPDOWN-Benachrichtigung in einem Dialogfeld beschrieben.

Die C++-Anwendung ruft die Clientkoordinaten der Schaltfläche aus dem Benachrichtigungsheader ab und konvertiert sie in Bildschirmkoordinaten. Anschließend wird ein Popupmenü erstellt und am unteren Rand der Schaltfläche angezeigt. Um das Beispiel einfach zu halten, werden Tastenkombinationen für das Menü nicht implementiert.

Was Sie wissen müssen

Technologieen

Voraussetzungen

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

Anweisungen

Schritt 1: Warten Sie auf die BCN_DROPDOWN-Benachrichtigung.

case BCN_DROPDOWN:
{
    NMBCDROPDOWN* pDropDown = (NMBCDROPDOWN*)lParam;
    if (pDropDown->hdr.hwndFrom = GetDlgItem(hDlg, IDC_SPLIT))
    {

Schritt 2: Abrufen der Bildschirmkoordinaten der Schaltfläche.

Verwenden Sie die ClientToScreen--Funktion, um die Fensterkoordinaten des unteren linken Rands der Schaltfläche in Bildschirmkoordinaten zu konvertieren.

POINT pt;
pt.x = pDropDown->rcButton.left;
pt.y = pDropDown->rcButton.bottom;
ClientToScreen(pDropDown->hdr.hwndFrom, &pt);

Schritt 3: Erstellen eines Menüs und Hinzufügen von Elementen

Verwenden Sie die CreatePopupMenu--Funktion, um ein Menü zu erstellen. Verwenden Sie die AppendMenu--Funktion, um dem Menü Elemente hinzuzufügen. IDC_MENUCOMMAND1 und IDC_MENUCOMMAND2 sind anwendungsdefinierte Konstanten für Menübefehle.

HMENU hSplitMenu = CreatePopupMenu();
AppendMenu(hSplitMenu, MF_BYPOSITION, IDC_MENUCOMMAND1, L"Menu item 1");
AppendMenu(hSplitMenu, MF_BYPOSITION, IDC_MENUCOMMAND2, L"Menu item 2");

Schritt 4: Anzeigen des Menüs.

Die TrackPopupMenu--Funktion zeigt ein Kontextmenü an der angegebenen Position an und verfolgt die Auswahl von Elementen im Menü.

TrackPopupMenu(hSplitMenu, TPM_LEFTALIGN | TPM_TOPALIGN, pt.x, pt.y, 0, hDlg, NULL);

Vollständiges Beispiel

case WM_NOTIFY:
    switch (((LPNMHDR)lParam)->code)
    {
        case BCN_DROPDOWN:
        {
            NMBCDROPDOWN* pDropDown = (NMBCDROPDOWN*)lParam;
            if (pDropDown->hdr.hwndFrom = GetDlgItem(hDlg, IDC_SPLIT))
            {

                // Get screen coordinates of the button.
                POINT pt;
                pt.x = pDropDown->rcButton.left;
                pt.y = pDropDown->rcButton.bottom;
                ClientToScreen(pDropDown->hdr.hwndFrom, &pt);
        
                // Create a menu and add items.
                HMENU hSplitMenu = CreatePopupMenu();
                AppendMenu(hSplitMenu, MF_BYPOSITION, IDC_MENUCOMMAND1, L"Menu item 1");
                AppendMenu(hSplitMenu, MF_BYPOSITION, IDC_MENUCOMMAND2, L"Menu item 2");
        
                // Display the menu.
                TrackPopupMenu(hSplitMenu, TPM_LEFTALIGN | TPM_TOPALIGN, pt.x, pt.y, 0, hDlg, NULL);
                return TRUE;
            }
            break;
        }
    }
    return FALSE;
}

BCN_DROPDOWN Benachrichtigungscode

Über Schaltflächen

Button Control Reference

Verwenden von Schaltflächen

schaltfläche