Bölünmüş Düğmeden BCN_DROPDOWN Bildirimini İşleme

Bu konu başlığı altında, iletişim kutusu yordamında BCN_DROPDOWN bildirimine yanıt vermenin olası bir yolu açıklanmaktadır.

C++ uygulaması bildirim üst bilgisinden düğmenin istemci koordinatlarını alır ve bunları ekran koordinatlarına dönüştürür. Ardından bir açılır menü oluşturur ve düğmenin en altında görüntüler. Örneği basit tutmak için, menü için klavye kısayolları uygulanmaz.

Bilmeniz gerekenler

Teknolojileri

  • windows denetimlerini

Önkoşullar

  • C/C++
  • Windows Kullanıcı Arabirimi Programlama

Talimat -ları

1. Adım: BCN_DROPDOWN bildirimini bekleyin.

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

2. Adım: Düğmenin ekran koordinatlarını alın.

Düğmenin sol alt kenarının pencere koordinatlarını ekran koordinatlarına dönüştürmek için ClientToScreen işlevini kullanın.

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

3. Adım: Menü oluşturma ve öğe ekleme.

Menü oluşturmak için CreatePopupMenuişlevinikullanın. Menüye öğe eklemek için AppendMenu işlevini kullanın. IDC_MENUCOMMAND1 ve IDC_MENUCOMMAND2, menü komutları için uygulama tanımlı sabitlerdir.

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

4. Adım: Menüyü görüntüleyin.

TrackPopupMenu işlevi, belirtilen konumda bir kısayol menüsü görüntüler ve menüdeki öğelerin seçimini izler.

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

Tam örnek

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 Bildirim Kodu

Düğmeler hakkında

düğme denetimi başvuru

Düğmeleri kullanarak

Düğmesi