有没有办法可以将 unicode 文本添加到 MBCS MFC 菜单
Posted
技术标签:
【中文标题】有没有办法可以将 unicode 文本添加到 MBCS MFC 菜单【英文标题】:Is there a way I can add unicode text to a MBCS MFC menu 【发布时间】:2011-08-04 15:27:34 【问题描述】:我有一个使用 MBCS 字符集编译的 MFC 应用程序。我的主菜单中有一个子菜单,我想向其中添加 unicode 字符。可以吗?
【问题讨论】:
【参考方案1】:您甚至可以在 MBCS 应用程序中强制使用 Unicode 字符串,方法是显式调用 API 的 Unicode 形式并将其传递给 Unicode 字符串。
在您的情况下, ModifyMenuW() 是设置菜单项文本的 API(假设菜单项已经存在):
ModifyMenuW(GetMenu()->m_hMenu,ID_APP_ABOUT, MF_BYCOMMAND , 0, L"\u573F");
这段代码显示一个汉字(我不知道它的意思)而不是原文
字符串前面的L
表示它是一个Unicode 字符串。 \u573F
是在 C++ ASCII 源文件中编码 Unicode 字符的方式。 API名称末尾的W
:代表Wide,表示API的Unicode形式。
请注意,如果您的目标是翻译应用程序的完整 UI,则完全是另一回事:我在这里展示的方法仅适用于一次性调用。你无法以这种方式创建完整的 UI。
您可以将您的 MBCS 应用程序翻译成日语、俄语等...而无需切换到 Unicode(尽管进行这种切换是一个非常好的主意。但这对于旧版应用程序来说可能代价高昂)。
您有 2 个朋友可以帮助您:appTranslator 可让您非常轻松地翻译您的应用(并管理您的翻译(免责声明:这是我自己的广告 ;-) 和 Microsoft AppLocale 帮助您在不同的环境中测试 MBCS 应用代码页而不实际更改计算机的代码页(需要重新启动)。
【讨论】:
InsertMenuW(m_hMenu,i,MF_BYPOSITION,j,L"\u573F") 只是给了我一个?在我的菜单中。我错过了什么吗? 哪个操作系统?如果 XP:您是否安装了对东亚语言的支持(iow 字体)? Windows 7 Ultimate。我安装了中文代码页,虽然它不活动。 Weird :-( 第一个:使用 Vista+,默认安装东亚字体。我在 CMainFrame::OnCreated() 的末尾添加了这一行,它工作正常: InsertMenuW(GetMenu() ->m_hMenu,0,MF_BYPOSITION,10000,L"\u573F") ; 这将起作用,除非您使用 MFCFeaturePack 并且正在使用 CMFCMenuBar。 CMFCMenuBar 将菜单文本内部存储在 CString 中,这打破了这种方法以上是关于有没有办法可以将 unicode 文本添加到 MBCS MFC 菜单的主要内容,如果未能解决你的问题,请参考以下文章
将字符串(带有 unicode 字符)添加到字典时添加额外的斜杠( \ )
有没有办法在“。”之前将“文本”添加到字符串中?示例:10.jpg