使用VC++ ATL开发Office COM插件(三)
2007-08-31 12:46
417 查看
8、为我刚加入的按钮加入其响应事件:
ATL为COM对象的Idispatch接口提供了两个模板类: IDispEventImpl<>和IDispEventSimpleImpl<>,选择IDispEventSimpleImpl<>,因为它不需要额 外的类型库信息,从IDispEventSimpleImpl<>继承一个类:
class ATL_NO_VTABLE CAddin :
public CComObjectRootEx < CComSingleThreadModel>,
.....
public IDispEventSimpleImpl<1,CAddin,
&__uuidof(Office::_CommandBarButtonEvents>
声明按钮点击事件的回调函数:
void __stdcall OnClickButton(Idispatch * /*Office::_CommandBarButton**/ Ctrl,VARIANT_BOOL * CancelDefault);
用_ATL_SINK_INFO结构描述回调的参数信息:打开CAddin.h文件,在其最上加入以下声明:
extern _ATL_FUNC_INFO OnClickButtonInfo;(注意一定声明为外部变量)
然后打开CAddin.cpp文件为其加入以下定义:
_ATL_FUNC_INFO OnClickButtonInfo ={CC_STDCALL,VT_EMPTY,2,{VT_DISPATCH,VT_BYREF | VT_BOOL}};
加入按钮点击事件的具体实现:
void __stdcall CAddin::OnClickButton(IDispatch*
/*Office::_CommandBarButton* */ Ctrl,
VARIANT_BOOL * CancelDefault)
{
USES_CONVERSION;
CComQIPtr pCommandBarButton(Ctrl);
//the button that raised the event. Do something with this...
MessageBox(NULL, "Clicked Button1", "OnClickButton", MB_OK);
}
在接口映射宏中加入以下信息:
BEGIN_SINK_MAP(CAddin)
SINK_ENTRY_INFO(1, __uuidof(Office::_CommandBarButtonEvents),
/*dispid*/ 0x01,
OnClickButton, &OnClickButtonInfo)
END_SINK_MAP()
最后在分别在CAddin 类的 OnConnection() 和OnDisconnection()中调用DispEventAdvise() 和 DispEventUnadvise()连接和断开连接消息来源。
到这里就实现了一个简单的COM插件,运行程序,点击工具栏上新加入的按钮,就可以弹出("Clicked Button1")消息框。
如果熟悉VBA编程,就可以把编写的宏作为按钮响应事件,只需调用按钮的put_OnAction()方法:
spCmdButton->put_OnAction(OLESTR("YourMacroName"));
ATL为COM对象的Idispatch接口提供了两个模板类: IDispEventImpl<>和IDispEventSimpleImpl<>,选择IDispEventSimpleImpl<>,因为它不需要额 外的类型库信息,从IDispEventSimpleImpl<>继承一个类:
class ATL_NO_VTABLE CAddin :
public CComObjectRootEx < CComSingleThreadModel>,
.....
public IDispEventSimpleImpl<1,CAddin,
&__uuidof(Office::_CommandBarButtonEvents>
声明按钮点击事件的回调函数:
void __stdcall OnClickButton(Idispatch * /*Office::_CommandBarButton**/ Ctrl,VARIANT_BOOL * CancelDefault);
用_ATL_SINK_INFO结构描述回调的参数信息:打开CAddin.h文件,在其最上加入以下声明:
extern _ATL_FUNC_INFO OnClickButtonInfo;(注意一定声明为外部变量)
然后打开CAddin.cpp文件为其加入以下定义:
_ATL_FUNC_INFO OnClickButtonInfo ={CC_STDCALL,VT_EMPTY,2,{VT_DISPATCH,VT_BYREF | VT_BOOL}};
加入按钮点击事件的具体实现:
void __stdcall CAddin::OnClickButton(IDispatch*
/*Office::_CommandBarButton* */ Ctrl,
VARIANT_BOOL * CancelDefault)
{
USES_CONVERSION;
CComQIPtr pCommandBarButton(Ctrl);
//the button that raised the event. Do something with this...
MessageBox(NULL, "Clicked Button1", "OnClickButton", MB_OK);
}
在接口映射宏中加入以下信息:
BEGIN_SINK_MAP(CAddin)
SINK_ENTRY_INFO(1, __uuidof(Office::_CommandBarButtonEvents),
/*dispid*/ 0x01,
OnClickButton, &OnClickButtonInfo)
END_SINK_MAP()
最后在分别在CAddin 类的 OnConnection() 和OnDisconnection()中调用DispEventAdvise() 和 DispEventUnadvise()连接和断开连接消息来源。
到这里就实现了一个简单的COM插件,运行程序,点击工具栏上新加入的按钮,就可以弹出("Clicked Button1")消息框。
如果熟悉VBA编程,就可以把编写的宏作为按钮响应事件,只需调用按钮的put_OnAction()方法:
spCmdButton->put_OnAction(OLESTR("YourMacroName"));
相关文章推荐
- 使用VC++ ATL开发Office COM插件(一)
- 使用VC++ ATL开发Office COM插件(二)
- 【outlook plugin】利用VC++/ATL开发Office 2003 COM插件
- VC6.0 使用小结--让开发更加快捷的vc插件
- 使用VC++ ATL实现Office的COM插件
- 使用VC++ ATL实现iStylePDF的COM插件
- MS IDE RAD技术入门----VC6插件开发入门(1)----使用VC来可行性
- 使用VC++ ATL实现iStylePDF的COM插件
- VC 用微软插件或CHtmlView 开发浏览器时如何指定使用的IE内核版本
- 使用VC++ ATL实现iStylePDF的COM插件
- jQuery Mobile 移动开发中的日期插件Mobiscroll 2.3 使用说明
- 使用Dependency Walker查看可执行程序的引用关系(Windows+VC开发)
- 一个spring+hibernate开发的小程序的修改(其中配置文件使用的是HibernateSynchronizer插件生成)
- 使用code::blocks进行VC, Linux混合开发
- 使用 Eclipse 插件提高代码质量,让开发自动化。
- iOS开发笔记2-使用Alcatraz管理Xcode的插件
- NPAPI插件开发详细记录:实用功能(库的使用及多线程)
- 使用pathogen管理Vim插件并托管到Github 参照文章【1】【2】的办法,将vim打造成一个Python开发环境。文章中使用的是 pathogen + git 来管理 Vim 插件的。对这种
- (转)基于Metronic的Bootstrap开发框架经验总结(5)--Bootstrap文件上传插件File Input的使用
- eclipse插件开发:使用AST生成类(源码)