• 您的位置我爱Aspx >> VC.Net >> Office2000下内部COM插件的编程实现(之二)
  • Office2000下内部COM插件的编程实现(之二)

  • 作者:aspxer  来源:internet  日期:2007-5-21 23:49:26  关键字:com
  • 所示的界面效果了,但是点击时没有响应,最后就让我们来解决这个问题。 工具条按钮CommandBarButton 派发接口的响应事件是_CommandBarButtonEvents 。ATL提供了二种模板类IDispEventImpl <>IDispEventSimpleImpl <>来实现接口事件的接收,这里我们使用IDispEventSimpleImpl来实现(因为它不需要额外的类型库信息)。它需要设置SINK(接收)映射,通过_ATL_SINK_INFO结构来回调参数信息,最终通过DispEventAdviseDispEventUnadvise来与源接口连接或断开。实现方法如下: 1. COutlookAddin继承类中加入IDispEventSimpleImpl继承,代码如下: class ATL_NO_VTABLE COutlookAddin : public CComObjectRootEx<CComSingleThreadModel>, …… public IDispEventSimpleImpl<1,COutlookAddin,&__uuidof(Office::_CommandBarButtonEvents)> 2. 声明_ATL_SINK_INFO结构回调参数信息。在OutlookAddin.h文件中加入下面语句: // 按钮事件响应信息声明 extern _ATL_FUNC_INFO OnClickButtonInfo; 在OutlookAddin.cpp文件中加入定义语句,如下: // 按钮事件响应信息定义 _ATL_FUNC_INFO OnClickButtonInfo ={CC_STDCALL,VT_EMPTY,2,{VT_DISPATCH,VT_BYREF | VT_BOOL}}; 3. 加入Sink映射,如下: EGIN_SINK_MAP(COutlookAddin) SINK_ENTRY_INFO(1, __uuidof(Office::_CommandBarButtonEvents),/*dispid*/ 0x01, OnClickButton1, &OnClickButtonInfo) SINK_ENTRY_INFO(2, __uuidof(Office::_CommandBarButtonEvents),/*dispid*/ 0x01, OnClickButton2, &OnClickButtonInfo) SINK_ENTRY_INFO(3, __uuidof(Office::_CommandBarButtonEvents),/*dispid*/ 0x01, OnClickMenu, &OnClickButtonInfo) END_SINK_MAP() 4. 加入事件涵数。在OutlookAddin.h中加入声明: void __stdcall OnClickButton1(IDispatch * /*Office::_CommandBarButton**/ Ctrl,VARIANT_BOOL * CancelDefault); 在OutlookAddin.cpp中加入实现: // 工具条按钮1点击事件响应涵数 void __stdcall COutlookAddin::OnClickButton1(IDispatch* /*Office::_CommandBarButton* */ Ctrl,VARIANT_BOOL * CancelDefault) { USES_CONVERSION; CComQIPtr<Office::_CommandBarButton> pCommandBarButton(Ctrl); HINSTANCE result=ShellExecute(NULL, _T("open"), _T("http://www.vckbase.com"), NULL,NULL, SW_SHOW); } 5. 最后,打开或断开与接口的连接。方法如下: l 在OnConnection接口涵数的最后部分,加入下面代码来打开连接: CommandButton1Events::DispEventAdvise((IDispatch*)m_spButton); l 在OnDisconnection接口涵数中,加入下面代码来断开连接: CommandButton1Events::DispEventUnadvise((IDispatch*)m_spButton); 到此就完成一个Office内部插件的最小需求了,大家可以编译后打开Outlook2000看看效果如何,详细代码可参看文章所带示例源码,内有详细注释。 参考文献: Building an Office2K COM addin with VC++/ATL -- Amit Dey ATL开发指南(第二版) – Tom Armstrong & Ron Patton 联系方式:

    地址:陕西省西安市劳动路2号院六单元

    邮编:710082

    编者EMAIL:

    未来工作室(Future Studio)

    我对这篇文章有话说?
  • 广告位招租,广告代号:content_468_15
  • 上一篇:Win32学习笔记 序
    下一篇:Office2000下内部COM插件的编程实现(之一)