5

我正在构建一个 MFC C++ 应用程序,在 Visual Studio 中选择了“使用 Unicode 字符集”。我定义了 UNICODE,我的 CStrings 是 16 位的,我处理其中包含日文字符的文件名,等等。但是,当我将包含日文字符的 Unicode 字符串放入 CComboBox(使用 AddString)时,它们显示为 ????? .

我正在运行 Windows XP Professional x64(英文)。如果我使用 Windows 控制面板区域和语言选项、高级选项卡,并将非 Unicode 程序的语言设置为日语,我的组合框看起来是正确的。

所以,我希望我的组合框看起来正确,并且我想了解为什么“非 Unicode 程序的语言”设置会改变我的 Unicode 程序的行为。我还应该做些什么来告诉 Windows 我的应用程序是 Unicode 应用程序吗?

谢谢你的帮助!

4

2 回答 2

7

Windows 通过它们调用的函数知道 Unicode 和非 Unicode 程序之间的区别。大多数 Windows API 函数有两种变体,一种以 A 结尾表示非 Unicode,另一种以 W 结尾表示 Unicode。定义这些函数的包含文件将使用编译器设置自动为您选择一个或另一个。

字符可能无法正确显示,因为您选择了不包含它们的字体作为默认 UI 字体。

于 2009-10-29T03:52:59.207 回答
0

你从哪里得到字符串?如果它们在您的 C 源代码中被硬编码,那么在您调用 AddString 时,它们(很可能)已经损坏。

没有什么能阻止人们获取一些 Unicode 字符串,例如在 std::string 中“挤压”它并损坏它。即使应用程序被编译为 Unicode。

于 2009-11-11T08:34:16.827 回答