关于DuiLib的CRichEditUI控件在win8下输入中文乱码的解决方案

时间:2021-04-23 12:49:40
上午经理拿来一个微软suiface RT的平板,运行着我之前开发的一个软件,发现了一个bug,就是在输入富文本框内容时,竟然是乱码。

      这个平板是win8系统,之前这套系统在xp、vista下都进行过系统测试的,都没有出现过这种问题,决定查找一下原因。

      此富文本框是使用的DUILIB开源界面库的RichEdit控件进行实现的,通过一下午的查找原因,找到了两个解决方案:

     A、通过提供的QQdemo,发现unicode编译出的exe,在win8下输入中文时,richedit可正常显示中文,而多字节编译的exe,也是乱码,估解决方案之一就是将其工程改成unicode字符键进行编译,可正常使用richedit;

     B、另一解决方案,就不得不说微软的不按套路出牌了,在查看UIRichEdit.cpp的源码时发现了这样的一段代码:

关于DuiLib的CRichEditUI控件在win8下输入中文乱码的解决方案
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);
关于DuiLib的CRichEditUI控件在win8下输入中文乱码的解决方案

怀疑是不是win8下的msftedit.dll与xp、vista下的有差别导致的显示乱码问题,通过拷贝msftedit.dll到项目文件中,在win8下运行,发现richedit输入中文显示正常。估拷贝msftedit.dll到自己的安装目录下,同样可以解决乱码的问题。   msftedit.dll是richedit4.0的动态库,之前的有richedit32、richedit20,都可以在windows\system32下找的到。

显示效果如下:

关于DuiLib的CRichEditUI控件在win8下输入中文乱码的解决方案