TrackPopupMenuを使用してポップアップメニューのサブメニューを開く

サブメニューのポップアップメニューを開くには、TrackPopupMenu を使用して次の手順を実行する必要があります。

  1. メニューとサブメニューのメニューリソースを作成します。リソースエディターを使用してメニューとサブメニューを作成し、それぞれにIDを設定できます。
  2. メニューハンドルを、あなたのウィンドウクラスの中で作成します。ウィンドウクラスのメンバ変数にHMENU型の変数を一つ定義し、ウィンドウの生成処理の中で、LoadMenu関数を利用して、メニューリソースを読み込みます。
  3. ポップアップメニューのメッセージ処理関数を、あなたのウィンドウクラスに実装します。右クリックイベントを処理するために WM_CONTEXTMENU メッセージを使用したり、ポップアップメニューを表示する必要がある他の場所で TrackPopupMenu 関数を呼び出したりできます。
  4. ポップアップ メニューを表示するメッセージ処理関数で、TrackPopupMenu 関数を使用します。ポップアップ メニューのハンドル、フラグ、メニューの位置を指定する必要があります。
  5. ポップアップ メニューのメッセージ処理関数が WM_COMMAND メッセージを受け取ったら、メニュー項目の ID に基づいて適切に処理できます。

サブメニューのあるポップアップメニューを開く方法の例となるコードを以下に示します。

// 声明菜单句柄
HMENU hMenu;
// 在窗口的创建过程中加载菜单资源
BOOL YourWindowClass::Create()
{
// 加载菜单资源
hMenu = LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MENU));
// 创建窗口等其他初始化操作
// ...
return TRUE;
}
// 处理弹出菜单的消息
LRESULT YourWindowClass::HandleMessage(UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_CONTEXTMENU:
{
// 获取弹出菜单的位置
POINT pt;
pt.x = GET_X_LPARAM(lParam);
pt.y = GET_Y_LPARAM(lParam);
// 获取子菜单的句柄
HMENU hSubMenu = GetSubMenu(hMenu, 0);
// 显示弹出菜单
TrackPopupMenu(hSubMenu, TPM_LEFTALIGN | TPM_LEFTBUTTON, pt.x, pt.y, 0, hwnd, NULL);
break;
}
case WM_COMMAND:
{
// 处理菜单项的消息
switch (LOWORD(wParam))
{
case ID_MENU_ITEM_1:
// 执行菜单项1的操作
break;
case ID_MENU_ITEM_2:
// 执行菜单项2的操作
break;
// 其他菜单项的处理
}
break;
}
// 其他消息的处理
}
// 其他处理逻辑
}

サンプルコードでは、ウインドウ作成時にメニューリソースを読み込み、WM_CONTEXTMENUメッセージ処理関数でTrackPopupMenu関数を利用してポップアップメニューを表示しています。WM_COMMANDメッセージ処理関数では、メニュー項目の識別子に応じて、対応する処理を実行します。このコードは、必要に応じて変更・拡張してください。

コメントを残す 0

Your email address will not be published. Required fields are marked *


广告
広告は10秒後に閉じます。
bannerAds