对于许多语言,我必须动态更改菜单的POPUP文本,
但是控制此文本不是ID,如下面的代码参考资源
IDR_MENU_MAIN MENU
BEGIN
POPUP "File(&F)" // I want to change this
BEGIN
MENUITEM "Open(&O)", ID_CURVE_FILE_NEW
MENUITEM SEPARATOR
MENUITEM "Recent File", ID_FILE_MRU_FILE1, GRAYED
MENUITEM SEPARATOR
MENUITEM "E&xit", ID_APP_EXIT
END
POPUP "Language(&L)" // I want to change this
BEGIN
MENUITEM "Traditional Chinese", ID_LANGUAGE_CHT
MENUITEM "Simplified Chinese", ID_LANGUAGE_CHS
MENUITEM "English", ID_LANGUAGE_ENG
MENUITEM "Russian", ID_LANGUAGE_RUS
MENUITEM "Korean", ID_LANGUAGE_KOR
MENUITEM "Japanese", ID_LANGUAGE_JPN
END
POPUP "Help(&H)" // I want to change this
BEGIN
MENUITEM "", ID_APP_ABOUT
END
END
谢谢大家!
答案 0 :(得分:2)
以下是TRACE
的一些代码并修改弹出菜单字符串(hMenu
是主菜单的句柄);如果您的应用程序使用"新样式"菜单栏CMFCMenuBar
,您需要分别在之前和之后拨打m_wndMenuBar.GetHMenu()
和m_wndMenuBar.CreateFromMenu(hMenu, TRUE, TRUE);
:
CMenu* pMenu = CMenu::FromHandle(hMenu);
int i, nCou = pMenu->GetMenuItemCount();
UINT uID;
CString ss;
for (i = 0; i < nCou; i++)
{ uID = pMenu->GetMenuItemID(i);
if (uID == 0) // separator
{ TRACE(_T("----------------------\n"));
continue;
}
pMenu->GetMenuString(i, ss, MF_BYPOSITION);
if (uID == (UINT)-1)
{ TRACE(_T("Popup '%s' "), ss);
ss += _T("-Modified");
pMenu->ModifyMenu(i, MF_BYPOSITION, 0, ss);
TRACE(_T("modified to '%s' "), ss);
}
else
TRACE(_T("Item '%s', ID=%d "), ss, uID);
TRACE(_T("\n"));
}
答案 1 :(得分:2)
我回答我的问题,更改代码
CMenu* pMenu = CMenu::FromHandle(hMenu);
到
CMenu* pMenu = GetMenu();
它会起作用!非常感谢!
答案 2 :(得分:0)
尝试使用' setlocale '。
例如:
setlocale(LC_ALL,“繁体中文”);
setlocale(LC_ALL,“简体中文”);
..
..
http://msdn.microsoft.com/en-us/library/x99tb11d(v=vs.90).aspx
答案 3 :(得分:0)
这很棘手。
我所做的是拥有一个与菜单栏的顶级元素匹配的枚举,然后按位置引用它们。
然后,您必须使用MF_BYPOSITION而不是使用MF_BYCOMMAND来更新它们。
答案 4 :(得分:-1)
我的菜单是对话框和CToolbar