我正在构建一个在Visual Studio中选择“使用Unicode字符集”的MFC C ++应用程序。我有UNICODE定义,我的CStrings是16位,我处理其中包含日文字符的文件名,等等。但是,当我把包含日文字符的Unicode字符串放在CComboBox中时(使用AddString),它们显示为?????
我正在运行Windows XP Professional x64(英文版)。如果我使用Windows控制面板区域和语言选项,高级选项卡,并将非Unicode程序的语言设置为日语,我的组合框看起来是正确的。
所以,我希望我的组合框看起来正确,我想了解为什么“非Unicode程序的语言”设置正在改变我的Unicode程序的行为。我还应该做些什么来告诉Windows我的应用程序是一个Unicode应用程序吗?
感谢您的帮助!
答案 0 :(得分:7)
Windows通过他们调用的函数了解Unicode和非Unicode程序之间的区别。大多数Windows API函数将有两种变体,一种以非Unicode结尾,一种以Unicode结尾,以W结尾。定义这些函数的包含文件将使用编译器设置自动为您选择一个或另一个。
由于您选择了不包含它们的字体作为默认UI字体,因此字符可能无法正常显示。
答案 1 :(得分:0)
你从哪里得到琴弦? 如果它们在您的C源中被硬编码,那么在您调用AddString时它们(很可能)已经损坏。
没有什么能阻止人们使用某些Unicode字符串,例如在std :: string中“挤压”它并损坏它。即使应用程序编译为Unicode。