Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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;
}
Související témata
-
Referenční ovládacího prvku tlačítka