Word手写签名插件(COM加载项、VC6.0ATL)开发思路

Word手写签名插件(COM加载项、VC6.0ATL)开发思路
我在做一个word手写签名插件(COM加载项),使VC6.0,采用ATL来编写这个COM插件,目前大部分技术问题都已经解决,现在遇到一个很大的问题,就是当我插入该控件,然后用鼠标托动进行移动的时候(此时文档未保存),会进行“word内存不足,操作无法撤销”。如果文档保存过就可以避免出现这样的问题。
请问在我编程方面、或是WORD的设置方面有没有什么解决问题的办法呀?
我仔细检查了我的程序,应该没有内存泄漏,在接口引用计数上应该也没有什么问题(因为基本全部使用的是CComBSTR、CComPtr、CComQIPtr等智能指针),不过这个东西占的内存是有点多,当插入该控件后,WORD占内存会增加近1M,不过这对WORD应该不算什么吧。
=============================================
开发思路:
  写这个东东,其实就是写一个COM加载项。可以使用MFC、也可以使用ATL,也可以使用VB,我最终选用了ATL。主要是VC我用得比较多,而ATL通过模板库会给开发带来极大的便利,参考资料也比较多,因此选用了ATL。事实证明我的选择是正确的。不过使用VB相对要方便一些,VB可以很方便地对COM进行编程,编程中也可以直接使用Word的宏代码,根本不用做代码转换。
  开始编程,使用VC向导,可以很快的生成COM的框架,然后向工程里插入一个simple object(在菜单插入->插入ATL对象里面)。通过这个对象来改变WORD的菜单、TOOLBAR,这方面的文章很多,我的开发就是介绍了徐景周的一篇文章,到网上找一下,很多转载(我发现网上原创的东西实在不多呀)。这样一个简单的COM加载项的框架就建好了。
  手写签名部分的实现,这部分都是一些相对编程者容易的问题。简单说一下,首选插入一个对话框(在菜单插入->插入ATL对象里面),加入几个按钮,写一个单向链表用来存签名的笔画,用兼容DC、兼容位图、OleCreatePictureIndirect,把图片创建成一个IPictureDisp对象,以供下面的使用。
  再插入一个Full Control对象,方法同上。把上面一步生成的IPictureDisp写进Full Control对象,再调用WORD的AddOleCtrol方法将这个东东插入就可以了。
  这就是一个简单的流程。说的很粗略,因为不知道感兴趣的人多不多。
  在开发的过程中我遇到了以下这样一些问题,后来慢慢解决了,如果大家有兴趣可以来交流一下。
  1.如何在插入对象中取到WORD的ActiveDocument的指针(这个不能通过保存的方法来)。
    取Container的指针,再查IDispatch的接口。
      2.如果在程序里控制控件的删除,如在控件内点击,通过上下文菜单文菜单删除控件。
    可以给控件设置一下标志,然后通过Word的方法遍历对象组,检查对应的标志,然后删除。
      3.如何保存。
   可以重载框架的Save和Load方法,把对象的相关属性保存。这两个方法会由WORD自动调用。
      4.如何使用TOOLTIP。
    这个在MSDN里有详细的帮助,可以参照解决。
      5.如何移动控件。
    处理控件的OnLButtonDown/OnMouseMove/OnLButtonUp消息,然后通过Word的方法移动控件。

你可能感兴趣的:(Word手写签名插件(COM加载项、VC6.0ATL)开发思路)