현재 Windows CE 장치를 다중 언어로 만들려고합니다.메뉴 텍스트를 변경하는 방법
이렇게하려면 "51234"와 같은 메뉴 리소스의 텍스트를 대체했습니다. 메뉴 막대 만들기에서 메뉴 및 하위 메뉴를 반복하고 텍스트 숫자를 정수로 변환하여 데이터베이스에서 찾아 본 다음 텍스트를 변환합니다.
IDMB_BULK_AUDIT MENU
BEGIN
POPUP "51420"
BEGIN
MENUITEM "51432", ID_OPTIONS_PREFERENCES
MENUITEM "51435", ID_OPTIONS_STATS
END
END
정수 텍스트를 얻으려면 GetMenuItemInfo를 사용하고 SetMenuItemInfo를 사용하여 텍스트를 설정하십시오. 샘플 코드는 다음과 같습니다. 내 자신의 OutputDebug (...) 메서드가 있고이 메서드는 NavigateMenu라고하며 재귀 적으로 호출됩니다 (블록의 끝을 참조하십시오).
제 질문은이 방법으로 메뉴를 변경하거나 동적으로 (런타임에) 빌드해야합니까? 이 코드는 메뉴 계층 구조를 탐색하고 GetMenuItemInfo 및 SetMenuItemInfo에 대한 호출이 모두 성공한 정수 값을 가져옵니다. CommandBar_DrawMenuBar가 잘못된 메뉴 핸들 (1401)로 실패합니다. 내가 필요로 무엇
는// This is how I call the method.
NavigateMenu(pCommandBar->GetMenu());
if(::CommandBar_DrawMenuBar(pCommandBar->m_hCommandBar, MenuId))
{
OutputDebug(L"Draw - OK\n");
}
else
{
DWORD lastError = GetLastError();
OutputDebug(L"Draw - Fail [%d]\n", lastError);
}
void CMainFrame::NavigateMenu(HMENU HandleMenu)
{
wchar_t menuText[ 200 ];
BOOL cont = TRUE;
for(int i = 0; cont; ++i)
{
MENUITEMINFO menuiteminfo;
menuiteminfo.cbSize = sizeof(MENUITEMINFO);
menuiteminfo.fMask = MIIM_SUBMENU | MIIM_TYPE;
menuiteminfo.dwTypeData = menuText;
menuiteminfo.cch = 200;
menuiteminfo.hSubMenu = 0;
menuiteminfo.fType = MFT_STRING;
cont = GetMenuItemInfo(HandleMenu, i, true, &menuiteminfo);
if(cont)
{
CStringW menuText2((wchar_t *)menuiteminfo.dwTypeData);
if(menuText2.GetLength())
{
const int menuId = StringToInt(menuText2);
if(menuId > 0)
{
CStringW menuText3(LoadResString(menuId));
wcscpy(menuText, menuText3);
menuiteminfo.cch = menuText3.GetLength() + 1;
menuiteminfo.fMask = MIIM_TYPE;
//if(ModifyMenu(HandleMenu, i, MF_BYPOSITION, MF_STRING, menuText))
//if(ModifyMenu(HandleMenu, menuiteminfo.wID, MF_BYCOMMAND, MF_STRING, menuText))
if(SetMenuItemInfo(HandleMenu, i, true, &menuiteminfo))
{
//if(SetMenuItemInfo(HandleMenu, menuiteminfo.wID, false, &menuiteminfo))
OutputDebug(L"Success - > %d to '%s'\n", menuId, menuiteminfo.dwTypeData);
}
else
{
DWORD menuError = GetLastError();
OutputDebug(L"Fail [%d] - > %d to '%s'\n", menuError, menuId, menuiteminfo.dwTypeData);
}
}
}
if(menuiteminfo.hSubMenu)
{
NavigateMenu(menuiteminfo.hSubMenu);
}
}
}
}
[(윈도우 CE 5.0) 응용 프로그램과 MUI를 사용 (https://msdn.microsoft.com/en-us/library/ms904384.aspx). – IInspectable
내가 필요한 것은 "HMENU hmenu = SHGetMenu (pCommandBar-> m_hWnd);" 이 명령에서 HMENU를 사용하면 필요에 따라 팝업 메뉴 텍스트가 수정됩니다. 왼쪽의 유일한 문제는 해당 메뉴 값이 정수 값에서 변경되지 않는 CommandBar 단추입니다. –