Mar*_* Ba 5 winapi locale localization embedded-resource visual-c++
Windows XP:应用程序只能将此参数设置为0.此设置使该功能选择最适合控制台显示的语言.有关更多信息,请参阅"备注"部分.
它后来继续(相当隐藏在段落的中间):
(...)Windows XP不支持与线程区域设置分离的线程用户界面语言的概念.因此,此函数更改Windows XP上的线程区域设置.(......)
事实上这似乎就是发生了什么,也就是说,调用SetThreadUILanguageWindows XP似乎相当于调用SetThreadLocale,而在Vista +上它似乎与调用基本相同SetThreadPreferredUILanguages(在XP上根本不可用).
文档对我来说很明显,所以我的基本问题可能是:我是否应该SetThreadUILanguage在Windows XP 上调用更改(首选)用户界面语言并在某处正确记录,在Windows 7上,我应该称之为功能完全,或者我应该打电话SetThreadPreferredUILanguages?
我知道这是一个旧线程,但我很好奇您是否找到了解决方案?我正在处理同样的问题,并且我对微软的文档感到完全困惑。这是我到目前为止所学到的:
1SetThreadLocale几乎没什么用。我不太确定它到底是做什么的。MSDN页面首先声明了这一点:
SetThreadLocale 会影响 LANGUAGE 语句对资源的选择。该语句影响 CreateDialog、DialogBox、LoadMenu、LoadString 和 FindResource 等函数。它设置 CP_THREAD_ACP 隐含的代码页,但不影响 FindResourceEx。
好的。我明白这部分。但它有这个“宝石”:
Windows Vista 及更高版本:不要使用 SetThreadLocale 选择用户界面语言。
现在它是纯粹的微软了:) 那么上面段落中的那些废话到底是什么呢?
2SetThreadUILanguage仅适用于 Vista 及更高版本的操作系统。在 XP 上它几乎什么都不做,所以除非你想错过大量仍然坚持使用 XP 的用户,否则这个 API 目前也是无用的。(不过,在 Vista 和更高版本的操作系统上,它似乎可以自行完成这项工作。)
3SetThreadPreferredUILanguages仅适用于 Vista 及更高版本的操作系统,因此我们将回到缺乏 XP 支持的问题。据我了解,如果您在资源中包含多种语言,请说这三种:美式英语、法语、德语。当资源加载器加载它时,比如说,在瑞士,一个愚蠢的微软加载器将默认选择美国英语。所以这个 API 告诉它使用什么语言。(我知道,完全多余,但是,嘿,记住,我们正在与微软打交道。)
我似乎无法解决的问题是如何在 XP 中定义 UI 语言。可以用于FindResourceEx字符串和对话框(使用CreateDialogIndirect),但是文件打开/保存对话框或GetOpenFileName属性表或 呢CPropertySheet?
所以我很好奇你是怎么处理的?
| 归档时间: | 
 | 
| 查看次数: | 1006 次 | 
| 最近记录: |