MyWinApp::InitInstance()
假设您有一个基于对话框的 MFC 应用程序,它通过调用从函数中显示它的主对话框dlg.DoModal()
。
此外,此应用程序包含本地化资源(全部在项目中,此测试用例没有附属 DLL),也就是说,该IDD_TEST_DIALOG
资源有两次,一次是英语,一次是德语。
我现在要做的是在此对话框中添加一个按钮,用于在资源中的可用语言之间切换显示对话框的语言。这可能吗?(记住:对话框当前是通过DoModal()
函数显示的。)
当您想更改 MFC 使用的资源语言时,您调用SetThreadUILanguage
(适用于 WIn7 和 XP)或者SetThreadPreferredUILanguages
如果仅针对 Win7(Vista+)也可以调用。真的,如果您能够重新打开对话框,那么更改语言非常容易。对我来说,问题是是否有可能以某种方式重新加载具有不同资源的显示窗口。
请注意,可以确保重新加载所有字符串,也就是说,以某种方式遍历应用程序中的所有控件并调用SetWindowText
以更改窗口的文本。
然而,这与本地化对话框(资源)应该提供的内容背道而驰,即不仅翻译的字符串,而且对话框布局的必要更改:不同的语言字符串可能具有不同的长度,因此控件必须间隔不同。(我也可以想象,当支持从右到左的语言或亚洲文字时,必须相应地采用布局。)