寺委书记

Good good study, day day up!

导航

CRichEditCtrl作为IM对话框控件的方案

Posted on 2014-05-26 17:17  MonkChen  阅读(134)  评论(0)    收藏  举报

  最近在开发一个xmpp im客户端,选中的技术一直在Silverilght\WPF和Win32之间徘徊,由于客户端使用的是c++开发的gloox库(开源且有商业授权),因此Win32程序无疑是最佳选择,但又惮于繁琐的UI开发,因此迟迟未定;如果采用Silverlight或WPF,又要给gloox做庞大的封装工作,因此重心还是放到了Win32,这对没怎么做过MFC程序的我来说,还有些吃力。

  经过三天的google,输入和呈现控件还是采用CRichEditCtrl---当然,需要扩展一些功能,首当其冲的是插入图片的功能,这也是困扰我最大的问题。

     有了网络,有些基础工作还是要简单得多,如何插入图片,网上最多的方案还是采用QQ的ImageOle.dll,我也不例外,我首先下载的源码是http://www.newxing.com/Code/VC/Controls/1145.html

  这份源码很好,首先解决了gif、jpg、png等常用格式图片的插入问题,然后呢,当然要解决传输的问题,好在CRichEditCtrl本身就有序列化功能,StreamOut 和StreamIn,我照着MSDN实现了内容导入导出---本意是将整份rtf传给远端直接StreamIn呈现,结果发现了问题:ImageOle插入的图片只能插入时显示,保存后再从rtf打开则无法正常显示,只有一个边框。

  

   按照既定的想法,本来已经接近成功了,不料半路杀出个程咬金。各种搜索,纠结了一天,无果!各位看官如能解决,请不吝赐教,本人对Ole了解的实在不多。

  

   整个图文混编的消息序列化发送再反序列化呈现的方案宣告失败,还得另辟蹊径啊。想到QQ的图文混编消息发送时不是同步发送,而是文本先到,然后图片异步加载,腾讯的初衷应该是改善用户体验,而对我来说却是绕过技术障碍的方法。

     于是我有了新的想法:发送之前把图片替换为文本标识符,而图片本身异步发送,待接收端收到图片时,再将标识符替换为图片,不就解决了序列化和呈现不能同步的问题了。想到这里,真是五味杂陈……我究竟是迟钝还是聪明?

  

  接下来就是细节的处理,比如如何找到图片,如何替换文本等等,google了事。

      所附源码为程序原型,并不完整,只是验证了此方案的可行性,如要完整的方案,还请聪明的你自行解决吧。

     开发环境Win7+vs2012(PS:vs2012编译的win32 exe居然不能在xp运行,得给vs2012打补丁)

 

COleRichEditCtrlDemoProject.rar