最近在做IM软件,需要实现向Richedit插入表情,表情是动态的GIF图像。
google 查找相关技术,文章如下
How to insert a bitmap into an RTF document using the RichEdit control in Visual C++ 6.0
http://support.microsoft.com/default.aspx?scid=kb;en-us;220844
Animated Emoticons like those in MSN Messenger(英文版)
http://www.codeproject.com/KB/edit/AnimatedEmoticon.aspx
Animated Emoticons like those in MSN Messenger(中文版)
http://blog.csdn.net/dTianx/archive/2004/11/17/184949.aspx
DynamicGif作者blog
http://blog.csdn.net/kql01
第一个链接是微软提供的部分代码,只能用于插入BMP图片。使用了OleCreateFromFile创建的ole对象。
第二个、第三个链接都是dTianx写的,使用QQ的ImageOle.dll创建了ole对象。提供全部源代码,但ImageOle没有相关代码,在项目中,不敢使用,最近腾讯总是状告员工啥的,怕也状告我...。
第四个链接是一牛自己做的一个控件,导出函数InsertGifToRichedit2A可以方便地插入任意GIF。只提供DLL文件。
我对这4个方法逐一试验,结果发现这些方案都不可靠。
首先第一个不用说,只能插入BMP图片,不符合我们的要求,但这段代码已经可以让我们了解了插入一个OLE对象的全部步骤。
第三个DynamicGif使用导出函数InsertGifToRichedit2A,方便地插入了任意Gif图片,但是我发现他放出的这版本有问题,这个问题发生在拖动滚动条的时候,richedit闪动非常厉害。
处于无赖,自己也开发了个OLE组件。目前已经达到了DynamicGif,不过也同样存在着拖动滚动条,richard会闪的非常厉害,不过目前已经找到解决方案,需要进一步完善。