大家知道,在ATL编程时我们都是用应用程序向导辅助我们完成工作,连接点事件的添加也是如此,但有的时候由于疏忽,我们可能忘了勾中向导中的连接点复选框,以至无法添加事件;这对于高手当然不是什么问题,但对于刚入门的朋友却会因此手足无措,其实我们可以手工地添加连接点事件。
你可以在你的 Ctrl.idl文件中加做如下修改:(假设你的项目名为Ctrl ,带注释的语句是要手工添加的语句,注意语句位置)
#include "olectl.h"
import "oaidl.idl";
import "ocidl.idl";
[
object,
uuid(5CE437A0-EDA0-4344-9E40-75BD83545A9E),
dual,
nonextensible,
helpstring("IMyCtrl 接口"),
pointer_default(unique)
]
interface IMyCtrl : IDispatch{
[propput, bindable, requestedit, id(DISPID_FILLCOLOR)]
HRESULT FillColor([in]OLE_COLOR clr);
[propget, bindable, requestedit, id(DISPID_FILLCOLOR)]
HRESULT FillColor([out, retval]OLE_COLOR* pclr);
[propget, id(1), helpstring("属性 Sides")] HRESULT Sides([out, retval] SHORT* pVal);
[propput, id(1), helpstring("属性 Sides")] HRESULT Sides([in] SHORT newVal);
};
[
uuid(36791A3C-FCA8-48E8-A014-6BA79BF36A63),
version(1.0),
helpstring("Ctrl 1.0 类型库")
]
library CtrlLib
{
importlib("stdole2.tlb");
[
uuid(4C60C639-22A1-44c3-AB84-C0EAE5940DCA), //利用guidgen,exe生成一个ID填入括号
helpstring("_IMyCtrlEvent 接口") //说明你的事件接口
]
dispinterface _IMyCtrlEvent //添加此语句以声明接口
{
properties: //属性说明加在此行下面
methods: //方法说明加在此行下面
[id(1),helpstring("方法ClickIn")] HRESULT ClickIn([in] LONG x, [in] LONG y); //你自己添加的方法
[id(2),helpstring("方法ClickOut")] HRESULT ClickOut([in] LONG x, [in] LONG y); //你自己添加的方法
};
[
uuid(5B9C55CC-AD7B-426B-94E3-0587AEB3A5F9),
helpstring("MyCtrl Class")
]
coclass MyCtrl
{
[default] interface IMyCtrl;
[default,source] dispinterface _IMyCtrlEvent; //添加这行声明接口_IMyCtrlEvent为默认源接口
};
};
作了如上修改后,右键单击Ctrl.idl文件,在弹出菜单中选择“编译“,生成Ctrl.tlb。然后右键单击控件选择“添加连接点“,打开“欢迎使用实现连接点向导“对话框,在“源接口“列表框双击你的事件,把它添加到“实现连接点“列表框。好了,看看你的项目里增加了什么东东?