我正在本地化mfc应用程序。我的方法是创建一个仅包含gui的翻译副本的仅资源dll。我的问题是,在源代码中的某些地方可以通过其字符串名称找到弹出式资源。由于我已将这些字符串翻译成另一种语言,因此这些功能不再起作用。我对此的预期解决方案是改为通过ID查找这些元素,但是当我尝试这样做时,我发现它们似乎没有唯一的ID。
有关正在使用的.rc文件的摘要,请参见下文,请注意,弹出资源和操作没有ID:
IDR_MAINFRAME MENU
BEGIN
POPUP "&Action"
BEGIN
MENUITEM "&Tracking Start\tF2", ID_TRACKING_START
MENUITEM "Record...\tCtrl+R", ID_RECORDING_STREAMTOFILE
MENUITEM "Mouse Control Start\tF9", ID_ACTION_MOUSECONTROL
MENUITEM "Reflex Reduction\tF12", ID_REFLEXREDUCTION_TOGGLE
POPUP "Text &Log"
BEGIN
MENUITEM "Select Log&file...", ID_LOGGING_FILE
MENUITEM "Start &Logging\tF6", ID_LOGGING_LOG
END
MENUITEM SEPARATOR
MENUITEM "E&xit\tAlt+F4", ID_APP_EXIT
END
END
下面是用于按字符串名称查找UI元素的代码段
int CMainFrame::FindMenuItem(CMenu* Menu, LPCTSTR MenuString)
{
ASSERT(Menu);
ASSERT(::IsMenu(Menu->GetSafeHmenu()));
int count = Menu->GetMenuItemCount();
for (int i = 0; i < count; i++)
{
CString str;
if (Menu->GetMenuString(i, str, MF_BYPOSITION) && (strcmp(str,
MenuString) == 0))
{
return i;
}
}
return -1;
}
经过一番谷歌搜索之后,我发现了一个名为MENUEX https://docs.microsoft.com/en-us/windows/desktop/menurc/menuex-resource的东西,看来您可以将ID添加到弹出资源元素中了。再次但是,当我尝试将.rc文件更改为使用MENUEX而不是MENU时,我的vs2015编译器一点都不批准,现在我有点卡住了。
在此感谢任何对如何解决我的问题有任何想法的人!
答案 0 :(得分:0)
只想提供一个更新,我就能用Alex F的想法解决我的问题。谢谢亚历克斯!但是我想补充一点,我并没有真正找到令人满意的解决方案,但我想这是mfc的问题。