다음을 통해 공유


드롭다운 단추 처리 방법

드롭다운 단추는 사용자에게 옵션 목록을 제공할 수 있습니다. 이 스타일의 단추를 만들려면 BTNS_DROPDOWN 스타일(공용 컨트롤의 이전 버전과의 호환성을 위해 TBSTYLE_DROPDOWN이라고도 함)을 지정합니다. 화살표가 있는 드롭다운 단추를 표시하려면 TB_SETEXTENDEDSTYLE 메시지를 전송하여 TBSTYLE_EX_DRAWDDARROWS 도구 모음 스타일도 설정해야 합니다.

다음 그림에서는 바로 가기 메뉴가 열려 있고 파일 목록을 표시하는 드롭다운 "열기" 단추를 보여 줍니다. 이 예에서 도구 모음에는 TBSTYLE_EX_DRAWDDARROWS 스타일이 있습니다.

아이콘으로 표시되는 3개의 도구 모음 항목이 있는 대화 상자의 스크린샷. 하나에는 확장된 드롭다운 화살표와 3개 항목 바로 가기 메뉴가 있음

다음 그림에서는 이번에는 TBSTYLE_EX_DRAWDDARROWS 스타일이 없는 동일한 도구 모음을 보여 줍니다.

이전 대화 상자의 스크린샷. 바로 가기 메뉴가 있는 아이콘에 드롭다운 화살표가 없음

사용자가 BTNS_DROPDOWN 스타일을 사용하는 도구 모음 단추를 클릭하면 도구 모음 컨트롤이 부모 창에 TBN_DROPDOWN 알림 코드를 보냅니다.

알아야 하는 작업

기술

필수 구성 요소

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

지침

드롭다운 단추 처리

다음 코드 예는 애플리케이션이 도구 모음 컨트롤에서 드롭다운 단추를 지원하는 방법을 보여 줍니다.

BOOL DoNotify(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{

    #define lpnm   ((LPNMHDR)lParam)
    #define lpnmTB ((LPNMTOOLBAR)lParam)

    switch(lpnm->code)
    {
        case TBN_DROPDOWN:
        {
            // Get the coordinates of the button.
            RECT rc;
            SendMessage(lpnmTB->hdr.hwndFrom, TB_GETRECT, (WPARAM)lpnmTB->iItem, (LPARAM)&rc);

            // Convert to screen coordinates.            
            MapWindowPoints(lpnmTB->hdr.hwndFrom, HWND_DESKTOP, (LPPOINT)&rc, 2);                         
        
            // Get the menu.
            HMENU hMenuLoaded = LoadMenu(g_hinst, MAKEINTRESOURCE(IDR_POPUP)); 
         
            // Get the submenu for the first menu item.
            HMENU hPopupMenu = GetSubMenu(hMenuLoaded, 0);

            // Set up the pop-up menu.
            // In case the toolbar is too close to the bottom of the screen, 
            // set rcExclude equal to the button rectangle and the menu will appear above 
            // the button, and not below it.
         
            TPMPARAMS tpm;
         
            tpm.cbSize    = sizeof(TPMPARAMS);
            tpm.rcExclude = rc;
         
            // Show the menu and wait for input. 
            // If the user selects an item, its WM_COMMAND is sent.
         
            TrackPopupMenuEx(hPopupMenu, 
                             TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL, 
                             rc.left, rc.bottom, g_hwndMain, &tpm);

            DestroyMenu(hMenuLoaded);
         
        return (FALSE);
      
        }
    }
   
    return FALSE;
}

도구 모음 컨트롤 사용

Windows 공용 컨트롤 데모(CppWindowsCommonControls)