Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I det här avsnittet beskrivs ett möjligt sätt att svara på BCN_DROPDOWN-meddelandet i en dialogprocedur.
C++-programmet hämtar knappens klientkoordinater från meddelandehuvudet och konverterar dem till skärmkoordinater. Den skapar sedan en popup-meny och visar den längst ned på knappen. För att hålla exemplet enkelt implementeras inte kortkommandon för menyn.
Vad du behöver veta
Teknologier
Förutsättningar
- C/C++
- Programmering av Windows-användargränssnitt
Instruktioner
Steg 1: Vänta tills meddelandet BCN_DROPDOWN.
case BCN_DROPDOWN:
{
NMBCDROPDOWN* pDropDown = (NMBCDROPDOWN*)lParam;
if (pDropDown->hdr.hwndFrom = GetDlgItem(hDlg, IDC_SPLIT))
{
Steg 2: Hämta knappens skärmkoordinater.
Använd funktionen ClientToScreen för att konvertera fönsterkoordinaterna för knappens nedre vänstra kant till skärmkoordinater.
POINT pt;
pt.x = pDropDown->rcButton.left;
pt.y = pDropDown->rcButton.bottom;
ClientToScreen(pDropDown->hdr.hwndFrom, &pt);
Steg 3: Skapa en meny och lägg till objekt.
Använd funktionen CreatePopupMenu för att skapa en meny. Använd funktionen AppendMenu för att lägga till objekt på menyn. IDC_MENUCOMMAND1 och IDC_MENUCOMMAND2 är programdefinierade konstanter för menykommandon.
HMENU hSplitMenu = CreatePopupMenu();
AppendMenu(hSplitMenu, MF_BYPOSITION, IDC_MENUCOMMAND1, L"Menu item 1");
AppendMenu(hSplitMenu, MF_BYPOSITION, IDC_MENUCOMMAND2, L"Menu item 2");
Steg 4: Visa menyn.
Funktionen TrackPopupMenu visar en snabbmeny på den angivna platsen och spårar valet av objekt på menyn.
TrackPopupMenu(hSplitMenu, TPM_LEFTALIGN | TPM_TOPALIGN, pt.x, pt.y, 0, hDlg, NULL);
Fullständigt exempel
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;
}
Relaterade ämnen
-
referens för knappkontroll