我正在使用MFC开发MBCS应用程序。我正在尝试支持亚洲语言。出于讨论的目的,我们要说的是我要支持中文。通过将中文字符直接粘贴到RC文件中,我能够通过MessageBoxW和Dialog SCREENs支持弹出对话框。我无法使用资源视图或直接编辑RC文件来使文件菜单起作用。每当我输入任何亚洲字符时,屏幕就会显示???。一个?每个字符。我尝试使用ModifyMenuW在C ++中修改菜单。我收到更多问号。 Visual Studio显示一切正常,并且RC文件是Unicode(UTF-16)。我无法轻松地将项目转换为unicode模式。西班牙语,法语和德语都可以正常工作(德语中的一种Esets不起作用,但这不是演出的制胜法宝)。接下来我应该尝试什么?
谢谢!
答案 0 :(得分:1)
好吧,简单的答案就是将应用程序更改为Unicode,但这并不总是那么简单,或者根本不可能。
关于在MBCS应用程序中使用Unicode,某些事情是可能的,而另一些事情则不是。例如,我制作了一个MBCS应用程序,该程序在ListView控件中显示和编辑程序字符串(消息,菜单等)的翻译,但是ListView确实有一条特定消息将其转换为Unicode(LVM_SETUNICODEFORMAT
)并支持操作(另请参见CCM_SETUNICODEFORMAT
)。菜单虽然不是控件,但确实具有“宽”(Unicode)功能。
如果要在应用程序中使用Unicode,则需要进行一些测试。不能保证成功,但是您至少可以得出一些结论,并确定您想做的事是否可能。
测试1:
您提到尝试ModifyMenuW()
,但这将尝试修改现有菜单。相反,请尝试InsertMenuW()
或InsertMenuItemW()
。任何unicode字符串都应正确显示,因此不仅要尝试中文,还要尝试其他语言(例如希腊语或俄语)。顺便说一句,我看不到法语的工作方式和德语的工作方式(它们使用相同的代码页-西欧)。您的测试机的系统代码页是什么?
测试2:(如果上述操作失败)
尝试以单个(unicode)菜单项为根来更改整个菜单(SetMenu()
)。
Test3:(如果上述操作失败)
然后,您需要检查包含菜单的窗口是否必须为Unicode。创建一个简单的“ Hello World” Win32应用程序,或查找一个示例(如果Visual Studio不为您这样做)(这些基本上是注册窗口类,创建主窗口并启动消息循环)-您也必须添加菜单,则可使用菜单功能的“宽”版明确使用。如果这不起作用,请尝试将创建窗口的代码更改为unicode。这样,您将知道是否需要unicode窗口才能拥有菜单。
请进行这些测试,并让我们知道结果。如果需要,我会进一步发布。