创建过程以VS2010为例,分三篇(创建ATL项目、添加方法/属性和枚举、添加连接点)演示。本篇演示添加连接点。
传送门:
《使用ATL创建简单ActiveX控件(一) —— 创建ATL项目 》
《使用ATL创建简单ActiveX控件(二) —— 添加方法/属性和枚举》
一、添加连接点描述信息
切换到类视图窗口,找到“ATLActiveXDemoLib”并展开,可以看到“IATLAXDemoEvents”源,在其上点击鼠标右键,选择“添加”,再选择“添加方法”,如下图所示:
图例的类视图所显示的接口列表中,下方还有一个“IATLAXDemoEvents”源,该“IATLAXDemoEvents”源不是我们要添加接口的目标,最简单的区分方法是双击“IATLAXDemoEvents”源定位“IATLAXDemoEvents”源位置,如果其是被定义在IDL文件中,则是正确的“IATLAXDemoEvents”源。
点击了“添加方法”后,IDE会弹出“添加方法向导”,如下图所示:
填写相关信息后点击“完成”,IDE会自动根据填写内容在IDL文件中添加连接点描述信息,如下图所示:
二、生成连接点代码
连接点描述信息添加完成后,就可以通过连接点代理生成连接点代码了,在类视图窗口中右键点击类“CATLAXDemo”(也就是第一篇中添加的ATL控件类),在弹出的菜单中选择“添加”->“添加连接点”,如下图所示:
图例中还有一个相似的菜单项“实现接口”,该菜单项用于在连接点添加完成后,通过它来完成接口。被完成的接口,VS IDE将不再支持其添加连接点的操作,所以如果将来有可能还会添加连接点,就不要“实现接口”。
添加连接点后,VS IDE会自动根据IDL文件中连接点的描述信息在控件项目中添加连接点代码,如下图所示:
该函数所需的功能都已经实现,只需要在需要触发连接点的地方调用连接点函数即可。
三、在容器中使用连接点
1、注册控件
以管理员身份打开命令行,使用”regsvr32”命令注册控件,如下图所示:
2、使用IDE在控件容器中加载控件
创建控件容器(比如MFC Dialog项目)后,打开工具箱项,选择刚才编写的“ATLAXDemo”控件再点击“添加”将控件添加到项目工具箱中,如下图所示:
此时,打开项目工具箱可以看到“ATLAXDemo class”已经添加为工具箱的最后一项,如下图所示:
在容器中加载控件(比如在MFC Dialog项目中,在资源界面打开主Dialog,从工具箱中将“ATLAXDemo class”控件拖到主Dialog中,假定控件ID为“IDC_ACTIVEXCONTROL1”),再打开控件对象的属性窗口,切换到事件界面,可以在事件列表中看到前面定义的“TestConnectPoint”连接点,编辑添加事件响应函数“ActiveXCtrlEventSink”,如下图所示:
添加事件响应函数并回车确认后,IDE将后自动在项目添加事件响应函数的实现代码,H文件中的声明内容如下图所示:
其中,宏DECLARE_EVENTSINK_MAP()用于定义事件响应映射,类似于MFC中的DECLARE_MASSAGE_MAP()和ATL中的DECLARE_MSG_MAP()。
CPP文件中的实现内容如下图所示:
注意上图的事件映射中被红色标记出来的数字”1“,它代表了该事件映射所绑定的AxtiveXCtrlEventSink()函数所映射的连接点在IDL文件中的编号。