다음을 통해 공유


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

이 항목에서는 대화 상자 절차에서 BCN_DROPDOWN 알림에 응답하는 한 가지 가능한 방법에 대해 설명합니다.

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

알아야 할 사항

기술

  • windows 컨트롤

필수 구성 요소

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

단추 정보

단추 컨트롤 참조

단추 사용하여

단추