Office2000下内部COM插件的编程实现
2006-07-21 11:45:48 来源:WEB开发网工具条按钮CommandBarButton派发接口的响应事件是_CommandBarButtonEvents。ATL提供了二种模板类IDispEventImpl<>和IDispEventSimpleImpl<>来实现接口事件的接收,这里我们使用IDispEventSimpleImpl来实现(因为它不需要额外的类型库信息)。它需要设置SINK(接收)映射,通过_ATL_SINK_INFO结构来回调参数信息,最终通过DispEventAdvise和DispEventUnadvise来与源接口连接或断开。实现方法如下:
1. 在COutlookAddin继承类中加入IDispEventSimpleImpl继承,代码如下: class ATL_NO_VTABLE COutlookAddin :
2. 声明_ATL_SINK_INFO结构回调参数信息。在OutlookAddin.h文件中加入下面语句:
public CComObjectRootEx<CComSingleThreadModel>,
……
public IDispEventSimpleImpl<1,COutlookAddin,&__uuidof(Office::_CommandBarButtonEvents)>// 按钮事件响应信息声明
在OutlookAddin.cpp文件中加入定义语句,如下:
extern _ATL_FUNC_INFO OnClickButtonInfo;// 按钮事件响应信息定义
3. 加入Sink映射,如下:
_ATL_FUNC_INFO OnClickButtonInfo ={CC_STDCALL,VT_EMPTY,2,{VT_DISPATCH,VT_BYREF | VT_BOOL}};EGIN_SINK_MAP(COutlookAddin)
4. 加入事件函数。在OutlookAddin.h中加入声明:
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()void __stdcall OnClickButton1(IDispatch * /*Office::_CommandBarButton**/ Ctrl,VARIANT_BOOL * CancelDefault);
在OutlookAddin.cpp中加入实现: // 工具条按钮1点击事件响应函数
5. 最后,打开或断开与接口的连接。方法如下
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);
}
● 在OnConnection接口函数的最后部分,加入下面代码来打开连接:CommandButton1Events::DispEventAdvise((IDispatch*)m_spButton);
● 在OnDisconnection接口函数中,加入下面代码来断开连接:CommandButton1Events::DispEventUnadvise((IDispatch*)m_spButton);
到此就完成一个Office内部插件的最小需求了,大家可以编译后打开Outlook2000看看效果如何,详细代码可参看文章所带示例源码,内有详细注释。
参考文献:
Building an Office2K COM addin with VC++/ATL -- Amit Dey
ATL开发指南(第二版) – Tom Armstrong & Ron Patton
- ››COM 组件多层聚合嵌套原理
- ››Office 2010 新特性:Outlook 2010
- ››Office 2010 新特性:PowerPoint 2010
- ››Office 2010 新特性: Excle 2010
- ››Office中Word十技巧 受益终身
- ››Office 2010宝典 word之利用文档导航窗格控制文档...
- ››Office 2010宝典 word之(2)利用文档导航窗格搜索文...
- ››Office 2010宝典 word之(3)可以朗读的屏幕取词翻译...
- ››Office 2010宝典 word之(4)多语言翻译
- ››Office 2010宝典 word之(5)您手边的工具:浮动工具...
- ››Office 2010宝典 word之(6)快速插入文档封面
- ››Office 2010宝典 word之(7)通过主题快速转换文档整...
更多精彩
赞助商链接