C/C++ で Windows Mobile 6 用のアプリケーションを作成しています。通常どおり、2 つのソフトキーがあり、そのうちの 1 つはメニューです。このメニューにはポップアップ メニューがあります。以下は、 からのソフト キーの (削除されたresources.rc
) ソースと、 からのいくつかの定義ですresource.h
。
#define IDR_MAIN_MENU 130
#define IDM_LOCK 30006
#define IDM_MAIN_MENU 30007
IDR_MAIN_MENU RCDATA
{
IDR_MAIN_MENU,
2,
I_IMAGENONE, IDM_LOCK , TBSTATE_ENABLED, TBSTYLE_AUTOSIZE | TBSTYLE_BUTTON , IDS_LOCK, 0, NOMENU,
I_IMAGENONE, IDM_MAIN_MENU, TBSTATE_ENABLED, TBSTYLE_AUTOSIZE | TBSTYLE_DROPDOWN, IDS_MENU, 0, 0,
}
IDR_MAIN_MENU MENU
{
POPUP "Menu"
{
MENUITEM "Keep display" IDM_KEEP_DISPLAY_TURNED_ON
MENUITEM "Keep backlight" IDM_KEEP_BACKLIGHT_TURNED_ON
POPUP "Min battery level"
{
MENUITEM "None" 0
MENUITEM SEPARATOR
MENUITEM "5%" 0
MENUITEM "10%" 0
...
}
MENUITEM "Exit" IDM_EXIT
}
}
ユーザーがメニューを開いたときに、それを変更したい-チェック、チェックを外す、有効にする、アイテムを無効にするなど.だから私はWM_INITMENUPOPUP
メッセージを次のように処理するWndProc()
:
case WM_INITMENUPOPUP:
switch (LOWORD(lParam))
{
case IDM_MAIN_MENU:
OnMainMenuInit(reinterpret_cast<HMENU>(wParam));
break;
}
break;
これで、ユーザーがメイン メニューを開くと、OnMainMenuInit() が呼び出されます。これはうまくいきます。
今問題について。「最小バッテリーレベル」サブメニューを開く処理を別途行いたいです。サブメニューを開くとWM_INITMENUPOPUP
メッセージが表示され、メニューのハンドル (メイン メニューの場合は 0x0A5B0B74、サブメニューの場合は 0x0A5BA924 など) も取得されますが、「最小バッテリー レベル」サブメニューには、識別に使用できる「コマンド ID」がありません。2
メインメニューの「最小バッテリーレベル」項目の位置であるとして取得しますが、 「最小バッテリーレベル」サブメニューを識別するためにLOWORD(lParam)
これをハードコーディングするという考えは好きではありません。メニュー項目を追加すると、2
このハードコードも変更2
します。
の「最小バッテリーレベル」サブメニューを識別する方法に関するアドバイスはありWM_INITMENUPOPUP
ますか? 「識別」とは、「このメニューが最小バッテリーレベルであることをどのように知るか」(「最小バッテリーレベルサブメニューのハンドルとは」ではなく) を意味します。