Bagikan melalui


Cara Menangani Pemberitahuan BCN_DROPDOWN dari Tombol Pisahkan

Topik ini menjelaskan salah satu kemungkinan cara merespons pemberitahuan BCN_DROPDOWN dalam prosedur dialog.

Aplikasi C++ mengambil koordinat klien tombol dari header pemberitahuan dan mengonversinya ke koordinat layar. Kemudian membuat menu popup dan menampilkannya di bagian bawah tombol. Untuk menjaga contoh sederhana, pintasan keyboard tidak diimplementasikan untuk menu.

Apa yang perlu Anda ketahui

Teknologi

Prasyarat

  • C/C++
  • Pemrograman Antarmuka Pengguna Windows

Petunjuk

Langkah 1: Tunggu pemberitahuan BCN_DROPDOWN .

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

Langkah 2: Dapatkan koordinat layar tombol.

Gunakan fungsi ClientToScreen untuk mengonversi koordinat jendela tepi kiri bawah tombol ke koordinat layar.

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

Langkah 3: Buat menu dan tambahkan item.

Gunakan fungsi CreatePopupMenu untuk membuat menu. Gunakan fungsi AppendMenu untuk menambahkan item ke menu. IDC_MENUCOMMAND1 dan IDC_MENUCOMMAND2 adalah konstanta yang ditentukan aplikasi untuk perintah menu.

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

Langkah 4: Tampilkan menu.

Fungsi TrackPopupMenu menampilkan menu pintasan di lokasi yang ditentukan dan melacak pilihan item pada menu.

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

Contoh lengkap

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

Kode Pemberitahuan BCN_DROPDOWN

Tentang Tombol

Referensi Kontrol Tombol

Menggunakan Tombol

Tombol