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