• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 如何拦截WORD中的事件或命令

如何拦截WORD中的事件或命令

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了组态王事件命令语言,事件命令语言,后期生成事件命令行,事件查看器命令,命令按钮能响应 事件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 如何拦截WORD中的事件或命令
描述:

我用C++写了一个ATL,在WORD启动的时候跟着启动,现在想拦截(重载)WORD中的事件或命令,比如说FILEOPEN(),FILESAVE()等等,该如何实现?
回答用VBA写WORD模板的不给分。


解决方案1:

http://www.codeproject.com/com/adwordaddin.asp
Handling Events
Probably in your addin, you'd also be interested in handling some of Word's events.A case in point is the Application objects DocumentOpen event, with DISPID=4, which is handled here. Word has a complex object model and you will find a host of other such events. If you use the good old OLE/COM Object Viewer to view msword9.olb, you'd find IDL like : 
         ....
        [id(0x00000003), helpcontext(0x00061a83)]
            void DocumentChange();
            [id(0x00000004), helpcontext(0x00061a84)]
            void DocumentOpen([in] Document* Doc);
        ......
As before we will use ATL's IDispEventSimpleImpl<> template class to implement our sink. For brevity, only the changes necessary to the earlier code has been mentioned.
extern _ATL_FUNC_INFO DocumentOpenInfo;
class ATL_NO_VTABLE CAddin : 
    public CComObjectRootEx,
    public CComCoClass,
    public ISupportErrorInfo,
    public IDispatchImpl,
    public IDispatchImpl<_IDTExtensibility2, &IID__IDTExtensibility2,  
         &LIBID_AddInDesignerObjects>,
    public IDispEventSimpleImpl<1,CAddin,     
         &__uuidof(MSWord::ApplicationEvents2)>
{
public:
....    
....
void __stdcall DocumentOpen(IDispatchPtr ptr)
{
    CComQIPtr<_Document> spDoc(ptr);
    ATLASSERT(spDoc);
    ....
    ....
}
BEGIN_SINK_MAP(CAddin)
SINK_ENTRY_INFO(1,__uuidof(MSWord::ApplicationEvents2),4,
    DocumentOpen,&DocumentOpenInfo)
END_SINK_MAP()
private:
CComPtr<MSWord::_Application> m_spApp;
};
DocumentOpenInfo is defined at the top of CAddin.cpp as 
_ATL_FUNC_INFO DocumentOpenInfo = {CC_STDCALL,VT_EMPTY,1,
    {VT_DISPATCH|VT_BYREF}};
All that remains for us to do is to add the code to setup and break down the connection. Using the ATL template class, therefore all we have to do is call DispEventAdvise() and DispEventUnadvise(). Our CAddin's OnConnection() and OnDisconnection(), needless to say, is the right place for doing this.
CComQIPtr<_Application> spApp(Application);
ATLASSERT(spApp);
m_spApp = spApp;
HRESULT hr = DispEventAdvise(m_spApp);
if(FAILED(hr))
return hr;
and in OnDisconnection(), 
DispEventUnadvise(m_spApp);
m_spApp = NULL;

解决方案2:

导入Word::ApplicationEvents2接口

解决方案3:

http://support.microsoft.com/default.aspx? VCBASK上面有的

解决方案4:

http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/q183/5/99.asp&NoWebC /> How To Catch Microsoft Word97 Application Events Using VC++
View products that this article applies to.
This article was previously published under Q183599


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 如何拦截WORD中的事件或命令

相关文章

  • 2017-06-04 VC怎么实现SHA1加密算法?
  • 2017-06-05 在主程序里调用DLL作的对话框退出时主窗口也退出在问题!
  • 2017-06-05 版主别删Delphi调用COM传递OleVariant参数,提示类型不匹配!!
  • 2017-06-04 再请高手,bstr参数,c#中怎么取?
  • 2017-06-05 导致程序运行效率迅速下降的主要原因是什么!
  • 2017-06-04 opencvUSB摄像头对比度
  • 2017-06-04 在vc里面能够以控件的方式调用mediaplayerclassic嘛?热切盼望回复,回复有价值者有份
  • 2017-06-04 关于获取组件中返回的二进制数据(SAFEARRAY的问题(一定给分!)
  • 2017-06-04 重新回来给大家服务,这里放分给大家!!!!
  • 2017-06-04 关于视图上画图显示位置的问题

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • vc编译windows的hello程序出错
    • 如何通过ocx界面上的按钮来关闭网页
    • 如何在ActiveX中嵌入对话框
    • 有关HOOK的问题请教
    • vc中mschart组件如何使用
    • 谁用过VC里嵌入Office??关于XOffice的例子谁清楚???
    • 关于跨线程使用ActiveX控件的问题
    • MSCOMM控件的事件驱动使用问题
    • 怎么用dll弹出一个对话框?????
    • 关于dll中的对话框播放flash的问题

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有