"WPS的COM加载项开发详解"
WPS的扩展分为两种,一种是WPS插件,另一种是COM加载项。COM加载项的开发流程与Word中的Addin相似。下面将详细介绍如何编写WPS的COM加载项。
需要建立一个ATL工程,并添加一个ATL简单对象。然后,需要继承_IDTExtensibility2接口,并添加一些按钮控件。为此,需要导入一些类型库,例如Kingsoft Add-In Designer和wpscore.dll。
在Stdafx.h文件中,需要加入以下代码以导入类型库:
```
#import "c:\Program Files\Kingsoft\WPS Office Personal\office6\kso10.dll" named_guids, rename_namespace("KSO")
#import "c:\Program Files\Kingsoft\WPS Office Personal\office6\wpscore.dll" rename_namespace("WPS")
using namespace KSO;
using namespace WPS;
```
这将引入两个命名空间,KSO主要是控件,而WPS主要是VBA的一些操作接口。
由于继承了_IDTExtensibility2接口,因此系统会自动生成5个继承函数:
```
public:
STDMETHOD(OnConnection)(LPDISPATCH Application, ext_ConnectMode ConnectMode, LPDISPATCH AddInInst, SAFEARRAY * * custom){return E_NOTIMPL;}
STDMETHOD(OnDisconnection)(ext_DisconnectMode RemoveMode, SAFEARRAY * * custom){return E_NOTIMPL;}
STDMETHOD(OnAddInsUpdate)(SAFEARRAY * * custom){return E_NOTIMPL;}
STDMETHOD(OnStartupComplete)(SAFEARRAY * * custom){return E_NOTIMPL;}
STDMETHOD(OnBeginShutdown)(SAFEARRAY * * custom){return E_NOTIMPL;}
```
对于添加按钮控件,我们只需要重载OnConnection和OnDisconnection函数。OnConnection函数主要来完成按钮的生成,而OnDisconnection函数主要来完成资源的释放。
为响应事件,我们需要继承Button的事件。需要做以下几点:
1. 继承`public IDispEventSimpleImpl<1,CWpsAddins,&__uuidof(KSO::_CommandBarButtonEvents)>`
2. 声明`_ATL_FUNC_INFO OnClickButtonInfo ={CC_STDCALL,VT_EMPTY,2,{VT_DISPATCH,VT_BYREF | VT_BOOL}};`并在添 加 对 象 的 头 文 件 中 添 加 引 用 `extern _ATL_FUNC_INFO OnClickButtonInfo;`
3. 重定义`typedef IDispEventSimpleImpl<1, CWpsAddins, &__uuidof(KSO::_CommandBarButtonEvents)> CommandBarButtonEvents1;`以便在下文中调用方便
4. 添加SINK代码 `BEGIN_SINK_MAP(CWpsAddins) SINK_ENTRY_INFO(1, __uuidof(KSO::_CommandBarButtonEvents),`
通过这些步骤,我们可以成功地编写WPS的COM加载项,并添加按钮控件和响应事件。