vc++实现word应用程序事件监听及响应
2014-09-04 12:22
375 查看
WORD编程,个人认为应该首选c#或VB,因为MS已经推出了外接程序编程方式支持完全面向对象的操作方法对OFFICE进行编程,可以参考微软官方:
http://msdn.microsoft.com/zh-cn/library/bb386298(v=vs.90).aspx#UnderstandingAddIns 该链接对这种技术进行了大概的介绍。
不过本文讨论的是用古老的COM自动化技术来实现,不是笔者要卖弄,而是给客户做了一个项目,用MFC技术实现的,客户对C#不了解也不愿花时间去学习,所以对于最简单的外接程序实现WORD应用程序事件监听方式被丢弃了,只能硬着头皮找资料。也许是这个功能比较偏,说实话国内这方面的资源真少,大部分都是问的,没有解决方法。最后问GOOGLE,找到了一篇MS官方的技术文章介绍:
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
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中CTreeContrl实现响应单击或双击事件
- 2014-10-27Android学习------自定义widget的监听事件的实现-----城市列表应用程序
- vc++ 中实现 易语言 响应事件方法
- 2014-10-27Android学习------布局处理(八)------自定义ListView的监听事件和Adapter的实现-----城市列表应用程序
- VC++.NET实现应用程序XP风格
- 孙鑫VC学习笔记:第十六讲 利用事件对象实现线程间的同步
- VC程序中实现控件的动态生成与响应
- VC程序中实现控件的动态生成与响应
- 为Java应用程序添加退出事件响应
- VC使用剪切板实现两个应用程序之间的数据交互
- VC程序中实现控件的动态生成与响应
- 关于实现按下回车键响应按钮事件问题
- 通过多线程为基于.NET的应用程序实现响应迅速(1)
- 在VC程序中实现控件的动态生成与响应
- 多线程学习(一)——通过多线程为基于 .NET 的应用程序实现响应迅速的用户
- VC++ 中响应鼠标悬停事件的简单方法(2005-8-10)
- 使用委托在用户自定义控件中实现事件响应
- VC程序中实现控件的动态生成与响应 【转贴】
- 通过多线程为基于.NET的应用程序实现响应迅速(3)