次の方法で共有


ドロップダウン ボタンを処理する方法

ドロップダウン ボタンを使用すると、ユーザーにオプションの一覧を表示できます。 このスタイルのボタンを作成するには、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)