C/C++에서 Windows Mobile 6 용 애플리케이션을 작성하고 있습니다. 일반적으로 2 개의 소프트 키가 있으며 그 중 하나는 메뉴입니다. 이 메뉴에는 팝업 메뉴가 있습니다. 여기 resource.h
에서 (이을 제거) resources.rc
에서 소프트 키와 몇 가지 정의의 소스입니다 : 사용자가 메뉴를 열 때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'을 사용하여'MENUITEM SEPARATOR' (질문에 표시된대로)를 사용하면 컴파일러 오류가 발생하는 것 같습니다. 'MENUITEM "", -1, MFT_SEPARATOR "를 사용하면 작동하는 것처럼 보입니다. –