您的位置:首页 > 编程语言 > C语言/C++

vc++实现word应用程序事件监听及响应

2014-09-04 12:22 309 查看
WORD编程,个人认为应该首选c#或VB,因为MS已经推出了外接程序编程方式支持完全面向对象的操作方法对OFFICE进行编程,可以参考微软官方:

http://msdn.microsoft.com/zh-cn/library/bb386298(v=vs.90).aspx#UnderstandingAddIns 该链接对这种技术进行了大概的介绍。

不过本文讨论的是用古老的COM自动化技术来实现,不是笔者要卖弄,而是给客户做了一个项目,用MFC技术实现的,客户对C#不了解也不愿花时间去学习,所以对于最简单的外接程序实现WORD应用程序事件监听方式被丢弃了,只能硬着头皮找资料。也许是这个功能比较偏,说实话国内这方面的资源真少,大部分都是问的,没有解决方法。最后问GOOGLE,找到了一篇MS官方的技术文章介绍:


如何: 通过使用 Visual C++.NET 和 MFC 处理 Word 事件

http://support.microsoft.com/kb/309294/zh-cn

阅读该技术文章后,将代码COPY下来调试,果然有效。不过在实现过程中,发现在Invoke方法中,WORD2007不需要对参数进行反转调用,如果按微软示例反转传参,结果是错误的,我猜测跟WORD版本有关系!!

对应WORD事件原型,可以用OLE/COM Viewer工具打开WORD安装的路径下,找到msword.olb文件查看,里面有您想监听的所有WORD事件。

另外,需要说明的两个点:
1、在导出word的类型库时,用vs2010是分开的,编译会出错,建议用vc++6.0导出WORD类型,只有两个文件msword.h跟msword.cpp,引入到工程中不会有任何问题.
2、在实现WORD的事件参数时候,如果涉及word的基本对象,用 pDispParams->rgvarg[0].pdispVal,不要用pDispParams->rgvarg[0].ppunkVal,因为你去看msword.h文件中会发现所有的word类型的构造函数都有带LPDISPATCH
pDispatch参数的,这样在响应的方法中就可以将该对象实例化,然后进行后续的逻辑处理了。

千言万语,不敌一份源码:

http://download.csdn.net/detail/liliweihua2002/7863279

上述链接即为本章所提的内容技术实现!

===============================================================

笔者建了一个C/C++技术交流群,欢迎加入,QQ群号:530183016
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  vc++ word 自动化 mfc office