Visual c++ 在哪里翻译MFC消息框
我正在将一个MFC应用程序本地化为日语,并使资源正常工作 我目前的问题是,当我使用Visual c++ 在哪里翻译MFC消息框,visual-c++,mfc,Visual C++,Mfc,我正在将一个MFC应用程序本地化为日语,并使资源正常工作 我目前的问题是,当我使用AfxMessageBox或MessageBox时,对话框标题和按钮消息会以英语显示,我还没有找到任何地方可以更改 我在搜索MSDN或谷歌时没有发现任何有用的东西 所以 这行吗?Windows是否提供日语、阿拉伯语和俄语的“确定”或“是/否”按钮 如果没有,我应该指定什么来更改这些 编辑:我使用了MessageBoxEx,编写了一个包装类,使其与AfxMessageBox一样方便使用。在英文和日文中,MB_OK显示
AfxMessageBox
或MessageBox
时,对话框标题和按钮消息会以英语显示,我还没有找到任何地方可以更改
我在搜索MSDN或谷歌时没有发现任何有用的东西
所以
这行吗?Windows是否提供日语、阿拉伯语和俄语的“确定”或“是/否”按钮
如果没有,我应该指定什么来更改这些
编辑:我使用了MessageBoxEx
,编写了一个包装类,使其与AfxMessageBox
一样方便使用。在英文和日文中,MB_OK
显示为“OK”,但其他按钮选项,如MB_YESNO
被翻译成我认为是正确的日文。这是一个需要翻译的相当小的应用程序,我们可能希望在较大的应用程序中使用自动化的应用程序。使用并指定单词wLanguageId字段
wLanguageId
[in]指定消息框中显示的文本的语言
按钮。指定零的值
(0)指示显示按钮
默认系统语言中的文本。
如果此参数为
MAKELANGID(LANG_中立,
SUBLANG_(中性),当前语言
与调用线程关联的是
用过
要指定当前语言以外的语言,请使用
MAKELANGID宏来创建此
参数有关详细信息,请参阅
马克兰吉德
更多信息可以在这里找到
如果这不适合您,另一种选择是创建您自己的对话框。标题是您指定的字符串,因此您应该能够翻译它。 在AfxMessageBox()中,标题是应用程序名(AfxGetAppName()IIRC) 关于按钮,文本是操作系统的一部分,无法翻译 MessageBoxEx(由Brian提到)在语言支持方面从来没有很好地工作过。从十多年前开始,Windows 2000将正确支持该语言id。但很明显,它从未成功 所以你很不走运。您唯一的解决方案是使用第三方实现,例如优秀的,并通过字符串表提供翻译
请注意,的词汇表包含Yes、no、cancel等词,。。。以25种语言编写,并将自动翻译。创建自己的L10N宏/函数,并使用以下代码: static LRESULT __stdcall ChangeCaptions(int nCode, WPARAM wParam, LPARAM lParam) { if (nCode == HCBT_ACTIVATE) { SetWindowText(GetDlgItem((HWND) wParam, IDOK), L10N(GUI_OK_MSG)); SetWindowText(GetDlgItem((HWND) wParam, IDCANCEL), L10N(GUI_CANCEL_MSG)); SetWindowText(GetDlgItem((HWND) wParam, IDYES), L10N(GUI_YES_MSG)); SetWindowText(GetDlgItem((HWND) wParam, IDNO), L10N(GUI_NO_MSG)); } return 0; } int addon_gui_messagebox(HWND parentHWnd, HINSTANCE hInstance, void *text, void *caption, int type) { int ret; hook = SetWindowsHookEx(WH_CBT, ChangeCaptions, hInstance, GetCurrentThreadId()); ret = MessageBox(parentHWnd, text, caption, type); UnhookWindowsHookEx(hook); return ret; } 静态LRESULT\uu stdcall变更字幕(int-nCode、WPARAM-WPARAM、LPARAM-LPARAM) { 如果(nCode==HCBT_激活){ SetWindowText(GetDlgItem((HWND)wParam,IDOK),L10N(GUI_OK_MSG)); SetWindowText(GetDlgItem((HWND)wParam,IDCANCEL),L10N(GUI\u CANCEL\u MSG)); SetWindowText(GetDlgItem((HWND)wParam,idies),L10N(GUI_YES_MSG)); SetWindowText(GetDlgItem((HWND)wParam,IDNO),L10N(GUI_NO_MSG)); } 返回0; } int addon_gui_messagebox(HWND parentHWnd,HINSTANCE HINSTANCE,void*文本,void*标题,int类型) { int ret; hook=SetWindowsHookEx(WH_CBT,ChangeCaptions,hInstance,GetCurrentThreadId()); ret=消息框(parentHWnd、文本、标题、类型); 解开钩(钩); 返回ret; }
正如我之前所写,MessageBoxEx当前忽略lang arg。你好,大卫,我尝试了MessageBoxEx,但它对我不起作用。我需要一些额外的“语言包”来让它工作吗?MessageBoxEx目前忽略lang arg。因此,MessageBox不是更好,而且您仍然存在本地化问题。。。来自MSDN:按钮采用系统用户界面的语言。目前MessageBoxEx和MessageBox的工作方式相同。在Windows 10中,MessageBoxEx对我来说工作正常。