共用方式為


如何處理下拉式按鈕

下拉式按鈕可以向用戶顯示選項清單。 若要建立此按鈕樣式,請指定BTNS_DROPDOWN樣式(也稱為TBSTYLE_DROPDOWN,以與舊版的通用控件相容)。 若要顯示具有箭號的下拉式按鈕,您也必須傳送TB_SETEXTENDEDSTYLE訊息來設定TBSTYLE_EX_DRAWDDARROWS工具列樣式。

下圖顯示下拉式清單的 [開啟] 按鈕,其中已開啟操作功能表,並顯示檔案清單。 在此範例中,工具列具有 TBSTYLE_EX_DRAWDDARROWS 樣式。

screen shot of a dialog box with three toolbar items represented by icons; one has an expanded drop-down arrow and a three-item context menu

下圖顯示相同的工具列,這次沒有 TBSTYLE_EX_DRAWDDARROWS 樣式。

screen shot of a previous dialog box, but the icon with the context menu has no dropdown arrow

當使用者按兩下使用 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)