无法在 Windows 对话框上显示其他 unicode 东亚语言
Posted
技术标签:
【中文标题】无法在 Windows 对话框上显示其他 unicode 东亚语言【英文标题】:Could not display other unicode Eastern Asian Lanuage on Windows DialogBox 【发布时间】:2012-10-17 19:57:42 【问题描述】:我使用DialogBox API 在我的应用程序中显示一个对话框。在 DLGPROC 过程回调的 WM_INITDIALOG 消息处理中,我可以在调试器中看到文本字符串是正确的 Unicode,并且SetDlgItemText 用于在对话框中的 Rich Edit 控件上设置文本。但是,当我尝试使用 GetDlgItemText API 从对话框中获取文本时,这些字符都是问号。
我的项目编译为 Unicode。而且我还使用了 spy++,它显示 Windows Proc 是 Unicode。
我正在使用英语区域设置的 Windows 7 上测试中文,所以我还为我的机器安装了中文语言包,但它也没有帮助。
我无法解释我在这里看到的内容。如果有人能对此或如何进一步调试有所了解,我们将不胜感激。
【问题讨论】:
Unicode 和 TCHAR 简直是地狱,你能试试GetFlgItemTextW
和 wchar_t
而不是 GetFlgItemText
和 TCHAR 吗?也许某些设置会导致您的程序使用函数的 ANSI 版本,并且从 Unicode 到 ANSI 的转换是您的错误的根源
我找到了原因,这是RichEdit控件的问题,默认情况下似乎没有使用unicode。我会在答案中添加更多信息。
【参考方案1】:
原来是因为那里的 RichEdit 控件。如果我只使用文本框,中文字符将与其他英文字符一起正确显示。所以在做了一些阅读之后,特别是this one,我做了一些尝试,我得到了它的工作。所以基本上我不应该使用 SetDlgItemText,而是应该使用以下代码(其中 m_strDisplay 是在富编辑上显示的文本):
::SendMessage(hWndText, EM_AUTOURLDETECT, TRUE, NULL);
SETTEXTEX TextInfo = 0;
TextInfo.flags = ST_DEFAULT|SF_UNICODE;
TextInfo.codepage = 1200;
SendMessage(hWndText, EM_SETTEXTEX, (WPARAM)&TextInfo, (LPARAM)(LPCTSTR)m_strDisplay);
在 RichEdit 控件上设置文本。
【讨论】:
以上是关于无法在 Windows 对话框上显示其他 unicode 东亚语言的主要内容,如果未能解决你的问题,请参考以下文章
win7显示引用的帐户当前已锁定,且可能无法登录,怎么解除锁定?
Windows 7, 使用 Java Swing 时,对话框显示不完整,输入时模糊