我正在用C/C++編寫Windows Mobile 6的應用程序。通常情況下,它有2個軟鍵,其中一個是菜單。這個菜單裏有一個彈出菜單。這裏是(剝離)從resources.rc
軟鍵和一些定義的來源從resource.h
:WM_INITMENUPOPUP和POPUP資源
#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
}
}
當用戶打開一個菜單,我想修改它 - 檢查,取消選中,啓用,禁用物品等,所以我處理在WndProc()
WM_INITMENUPOPUP
消息:
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
中的「最低電池電量」子菜單的任何建議?對於「識別」,我的意思是「我怎麼知道這個菜單是用於最低電池電量」(而不是「最小電池電量子菜單的處理是什麼」)。
我嘗試了'MENUEX',但是我無法像軟鍵一樣工作 - 編譯時會顯示「鎖定」和「菜單」軟鍵,但點擊「菜單」不會打開菜單。 – binaryLV
這可能是Windows CE與桌面Windows不同的地方之一。對不起,我不能進一步幫助。 –
對於它的價值,使用'MENUITEM SEPARATOR'(如問題所示)並使用'MENUEX'似乎會導致編譯器錯誤。使用'MENUITEM「」,-1,MFT_SEPARATOR'似乎可以正常工作。 –