ドロップダウン ボタンを処理する方法
ドロップダウン ボタンを使用すると、ユーザーにオプションの一覧を表示できます。 このスタイルのボタンを作成するには、BTNS_DROPDOWN スタイル (以前のバージョンの共通コントロールとの互換性を確保するために TBSTYLE_DROPDOWN とも呼ばれます) を指定します。 矢印付きのドロップダウン ボタンを表示するには、TB_SETEXTENDEDSTYLE メッセージを送信することで、TBSTYLE_EX_DRAWDDARROWS ツール バー スタイルも設定する必要があります。
次の図は、コンテキスト メニューが開いてファイルの一覧が表示されている状態の、ドロップダウンの [開く] ボタンを示しています。 この例では、ツール バーに TBSTYLE_EX_DRAWDDARROWS スタイルが設定されています。
次の図は同じツール バーですが、こちらには 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;
}
関連トピック