之前程序中使用的是微软2.0版本的richedit,结果有很多小问题没法解决,感觉有些问题就是richedit本身的问题。与QQ对比了一下,发现QQ则不存在这些问题。于是想到去看看QQ使用的什么版本的richedit,到QQ的安装目录中找到了richedit库文件RICHED20.DLL,右键查看属性得知对应的版本号为Rich Text Edit Control, v5.0。
高版本比低版本应该做了很多改进,并且对某些功能进行了增强,所以我们的richedit也换成了5.0版本:直接将QQ的5.0版本的RICHED20.DLL拷过来,直接打包在我们的安装目录下。换了后,与之前对比了一下,确实解决了部分问题。但是出现了新的问题,手动添加的超链接失效了,使用之前的2.0版本是正常的。起初以为是添加超链接的代码有问题,于是尝试做了一些修改,但是始终还是解决不了。网上搜了一下,基本上也没搜到有用的东西(此处顺便提一下:搜技术方面的东西,Google确实比Baidu强大多了),有一次无意中找到了这样的链接:https://connect.microsoft.com/VisualStudio/feedback/details/551071/the-6-0a-sdk-is-missing-riched20-lib-for-x64,将原有代码中调用CreateTextServices函数的地方换成如下代码:
void CreateRichEdit(ITextHost *pTextHost, IUnknown **ppUnk) { TextServicesProcType TextServicesProc; HMODULE hmod = LoadLibrary("msftedit.dll"); if (hmod) TextServicesProc = (TextServicesProcType)GetProcAddress(hmod, "CreateTextServices"); if (TextServicesProc) { HRESULT hr = TextServicesProc(NULL, pTextHost, ppUnk); } }超链接就正常了。虽然目前还不确定真正的原因所在,需要在此处记录一下。想到当前用的duilib库是较老的版本,看看最新版本的代码是否有改进的地方,于是用svn更新了duilib原始的代码,查看了一下,确实修改了,和上面的改法一模一样。虽然duilib现在维护的较少了,但是还是有不少热心于duilib的朋友将使用过程中发现的问题,提出了改进和修改的意见,所以还是人多力量大,研究的人越多,进步也就越多。下次再碰到duilib的问题,首先可以考虑对比一下最新的duilib,看看是否已经做了改动可以拿过来参考。
参考:
1、The 6.0A SDK is missing RichEd20.lib for x64:
https://connect.microsoft.com/VisualStudio/feedback/details/551071/the-6-0a-sdk-is-missing-riched20-lib-for-x64
2、RichEdit的加载问题:
http://blog.csdn.net/luck_donkey/article/details/10349671
3、关于DuiLib的CRichEditUI控件在win8下输入中文乱码的解决方案:
http://www.cnblogs.com/sunsmile/archive/2013/02/20/ningmengxiu.html
4、VS2005 VC6.0 RichEdit 高版本使用!!:
http://blog.csdn.net/shen_001/article/details/6967902
5、VC2008下CRichEditView加载RichEdit4.1版本:
http://blog.csdn.net/akof1314/article/details/6607265
6、COM Interface Hooking and Its Application - Part I:
http://www.codeproject.com/Articles/5253/COM-Interface-Hooking-and-Its-Application-Part-I
7、CRichEditControl50W - A VC++ Rich Text Edit 4.1 MFC Control:
http://www.codeproject.com/Articles/9810/CRichEditControl-W-A-VC-Rich-Text-Edit-MFC-Co
8、How to Create Rich Edit Controls:
http://msdn.microsoft.com/en-us/library/windows/desktop/hh298375%28v=vs.85%29.aspx