Sdílet prostřednictvím


Zpracování oznámení BCN_DROPDOWN z tlačítka Rozdělení

Toto téma popisuje jeden z možných způsobů reakce na oznámení BCN_DROPDOWN v dialogovém okně.

Aplikace C++ načte souřadnice klienta tlačítka z hlavičky oznámení a převede je na souřadnice obrazovky. Pak vytvoří místní nabídku a zobrazí ji v dolní části tlačítka. Aby byl příklad jednoduchý, klávesové zkratky nejsou pro nabídku implementovány.

Co potřebujete vědět

Technologie

Požadavky

  • C/C++
  • Programování uživatelského rozhraní systému Windows

Instrukce

Krok 1: Počkejte na oznámení BCN_DROPDOWN.

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

Krok 2: Získání souřadnic obrazovky tlačítka

Pomocí funkce ClientToScreen převeďte souřadnice okna levého dolního okraje tlačítka na souřadnice obrazovky.

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

Krok 3: Vytvoření nabídky a přidání položek

K vytvoření nabídky použijte funkci CreatePopupMenu. K přidání položek do nabídky použijte funkci AppendMenu. IDC_MENUCOMMAND1 a IDC_MENUCOMMAND2 jsou konstanty definované aplikací pro příkazy nabídky.

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

Krok 4: Zobrazení nabídky

Funkce TrackPopupMenu zobrazí místní nabídku v zadaném umístění a sleduje výběr položek v nabídce.

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

Kompletní příklad

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 kód oznámení

o tlačítkách

Referenční ovládacího prvku tlačítka

použití tlačítek

tlačítka