0

我使用DialogBox API 在我的应用程序中显示一个对话框。在 DLGPROC 过程回调的 WM_INITDIALOG 消息处理中,我可以在调试器中看到文本字符串是正确的 Unicode,并且SetDlgItemText用于在对话框中的 Rich Edit 控件上设置文本。但是,当我尝试使用 GetDlgItemText API 从对话框中获取文本时,这些字符都是问号。

我的项目被编译为 Unicode。而且我还使用了 spy++,它显示 Windows Proc 是 Unicode。

我正在使用英语语言环境在 Windows 7 上测试中文,所以我还为我的机器安装了中文语言包,它也没有帮助。

我无法解释我在这里看到的。如果有人能对此或如何进一步调试有所了解,将不胜感激。

4

1 回答 1

0

事实证明,这是由于那里的 RichEdit 控件。如果我只使用文本框,中文字符将与其他英文字符一起正确显示。所以在做了一些阅读之后,特别是这个,我做了一些尝试,我得到了它的工作。所以基本上我不应该使用 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 控件上设置文本。

于 2012-10-17T21:52:39.400 回答