用VC6.0编写Word插件(Office2K、XP、03)
2010-07-15 20:45:04 来源:WEB开发网但是点击时没有响应,最后就让我们来解决这个问题。
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 CWordAddin::OnClickButton1(IDispatch *
/*Office::_CommandBarButton**/ Ctrl,VARIANT_BOOL * CancelDefault)
{
MessageBox(NULL, "hello", "world", MB_OK);
}
5. 最后,打开或断开与接口的连接。方法如下
在OnConnection接口函数的最后部分,加入下面代码来打开连接:
在OnConnection接口函数的最后部分,加入下面代码来打开连接:
CommandButton1Events::DispEventAdvise((IDispatch*)m_spButton);
在OnDisconnection接口函数中,加入下面代码来断开连接:
CommandButton1Events::DispEventUnadvise((IDispatch*)m_spButton);
综上所述,编写一个简单的office的插件,其实并不难,只要按照步骤一步一步进行,肯定能成功,如果大家在使用过程中有什么疑问,欢迎一起探讨。
本文配套源码
更多精彩
赞助商链接