분할 단추에서 BCN_DROPDOWN 알림을 처리하는 방법

이 항목에서는 대화 상자 프로시저에서 BCN_DROPDOWN 알림에 응답할 수 있는 한 가지 방법에 대해 설명합니다.

C++ 애플리케이션은 알림 헤더에서 단추의 클라이언트 좌표를 검색하고 화면 좌표로 변환합니다. 그런 다음 팝업 메뉴를 만들어 단추 아래쪽에 표시합니다. 예제를 간단하게 유지하기 위해 메뉴에 대해 바로 가기 키가 구현되지 않습니다.

알아야 하는 작업

기술

필수 구성 요소

  • C/C++
  • Windows 사용자 인터페이스 프로그래밍

지침

1단계: BCN_DROPDOWN 알림을 기다립니다.

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

2단계: 단추의 화면 좌표를 가져옵니다.

ClientToScreen 함수를 사용하여 단추 왼쪽 아래 가장자리의 창 좌표를 화면 좌표로 변환합니다.

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

3단계: 메뉴를 만들고 항목을 추가합니다.

CreatePopupMenu 함수를 사용하여 메뉴를 만듭니다. AppendMenu 함수를 사용하여 메뉴에 항목을 추가합니다. IDC_MENUCOMMAND1 및 IDC_MENUCOMMAND2 메뉴 명령에 대한 애플리케이션 정의 상수입니다.

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

4단계: 메뉴를 표시합니다.

TrackPopupMenu 함수는 지정된 위치에 바로 가기 메뉴를 표시하고 메뉴의 항목 선택을 추적합니다.

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

전체 예제

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 알림 코드

단추 정보

단추 컨트롤 참조

단추 사용

Button