我正在用 C/C++ 为 Windows Mobile 6 编写应用程序。通常,它有 2 个软键,其中一个是菜单。此菜单中有一个弹出菜单。这是(剥离的)软键来源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
as LOWORD(lParam)
,这是主菜单中“最小电池电量”项的位置,但我不喜欢硬编码这个2
来识别“最小电池电量”子菜单的想法,因为添加菜单项意味着我必须也改变这个硬编码2
。
关于如何识别“最低电池电量”子菜单的任何建议WM_INITMENUPOPUP
?“识别”的意思是“我怎么知道这个菜单是针对最低电池电量的”(而不是“什么是最低电池电量子菜单的句柄”)。