关于DuiLib的CRichEditUI控件在win8下输入中文乱码的解决方案
上午经理拿来一个微软suiface RT的平板,运行着我之前开发的一个软件,发现了一个bug,就是在输入富文本框内容时,竟然是乱码。
这个平板是win8系统,之前这套系统在xp、vista下都进行过系统测试的,都没有出现过这种问题,决定查找一下原因。
此富文本框是使用的DUILIB开源界面库的RichEdit控件进行实现的,通过一下午的查找原因,找到了两个解决方案:
A、通过提供的QQdemo,发现unicode编译出的exe,在win8下输入中文时,richedit可正常显示中文,而多字节编译的exe,也是乱码,估解决方案之一就是将其工程改成unicode字符键进行编译,可正常使用richedit;
B、另一解决方案,就不得不说微软的不按套路出牌了,在查看UIRichEdit.cpp的源码时发现了这样的一段代码:
PCreateTextServices TextServicesProc; HMODULE hmod = LoadLibrary(_T("msftedit.dll")); if (hmod) { TextServicesProc = (PCreateTextServices)GetProcAddress(hmod,"CreateTextServices"); } if (TextServicesProc) { HRESULT hr = TextServicesProc(NULL, this, &pUnk); } hr = pUnk->QueryInterface(IID_ITextServices,(void **)&pserv);
怀疑是不是win8下的msftedit.dll与xp、vista下的有差别导致的显示乱码问题,通过拷贝msftedit.dll到项目文件中,在win8下运行,发现richedit输入中文显示正常。估拷贝msftedit.dll到自己的安装目录下,同样可以解决乱码的问题。 msftedit.dll是richedit4.0的动态库,之前的有richedit32、richedit20,都可以在windows\system32下找的到。
显示效果如下: