MFC ActiveX 控件:添加自定义方法
链接:http://msdn.microsoft.com/zh-cn/library/cc451420
自定义方法与常用方法的区别在于,自定义方法未由 COleControl 实现。必须为添加到控件的每个自定义方法提供实现。
ActiveX 控件用户可以随时调用自定义方法来执行控件特定的操作。自定义方法的调度映射项为 DISP_FUNCTION 窗体。
使用“添加方法向导”添加自定义方法
下列过程说明如何将自定义方法 PtInCircle 添加到 ActiveX 控件的主干代码。PtInCircle 确定传递给控件的坐标是在圆的内部还是外部。此过程也可用于添加其他自定义方法。用自定义方法名及其参数替换 PtInCircle 方法名和参数。
注意 此例使用“事件”一文中的
InCircle
函数。有关此函数的更多信息,请参见文章
MFC ActiveX 控件:向 ActiveX 控件添加自定义事件。
使用“添加方法向导”添加 PtInCircle 自定义方法
- 加载控件的项目。
- 在“类视图”中展开控件的库节点。
- 右击控件的接口节点(库节点的第二个节点)打开快捷菜单。
- 在快捷菜单中单击“添加”,然后单击“添加方法”。
此操作将打开“添加方法向导”。
- 在“方法名称”框中,键入“PtInCircle”。
- 在“内部名称”框中,键入方法的内部函数名或使用默认值(此例中为
PtInCircle
)。 - 在“返回类型”框中,单击方法的返回类型“VARIANT_BOOL”。
- 使用“参数类型”和“参数名”控件,添加一个称为
xCoord
的参数(OLE_XPOS_PIXELS 类型)。 - 使用“参数类型”和“参数名”控件,添加一个称为
yCoord
的参数(OLE_YPOS_PIXELS 类型)。 - 单击“完成”。
“添加方法向导”对自定义方法的更改
当您添加自定义方法时,“添加方法向导”对控件类头 (.H) 文件和实现 (.CPP) 文件进行一些更改。下列代码行被添加到控件类头 (.H) 文件中的调度映射声明:
VARIANT_BOOL PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);
此代码声明一个称为 PtInCircle
的调度方法处理程序。控件用户可以使用外部名称 PtInCircle 调用此函数。
下列代码行被添加到控件的 .IDL 文件:
[id(1), helpstring("method PtInCircle")] VARIANT_BOOL PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);
此行为 PtInCircle 方法分配一个特定的 ID 号,即该方法在“添加方法向导”方法和属性列表中的位置。由于自定义方法是用“添加方法向导”添加的,此方法的项自动添加到项目的 .IDL 文件。
另外,下列代码行(位于控件类的实现 (.CPP) 文件中)被添加到控件的调度映射:
DISP_FUNCTION(CSampleCtrl, "PtInCircle", PtInCircle, VARIANT_BOOL, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)
DISP_FUNCTION 宏将 PtInCircle 方法映射到控件的处理函数 PtInCircle
、将返回类型声明为 VARIANT_BOOL 并声明传递给 PtInCircle
的 VTS_XPOS_PIXELS 和 VTS_YPOSPIXELS 类型的两个参数。
最后,“添加方法向导”将存根 (stub) 函数 CSampleCtrl::PtInCircle
添加到控件的实现 (.CPP) 文件的末尾。为使 PtInCircle
按前面介绍的方式运行,必须对其做如下修改:
VARIANT_BOOL CSampleCtrl::PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord) { return InCircle(CPoint(xCoord, yCoord)); }
自定义方法与常用方法的区别在于,自定义方法未由 COleControl 实现。必须为添加到控件的每个自定义方法提供实现。
ActiveX 控件用户可以随时调用自定义方法来执行控件特定的操作。自定义方法的调度映射项为 DISP_FUNCTION 窗体。
使用“添加方法向导”添加自定义方法
下列过程说明如何将自定义方法 PtInCircle 添加到 ActiveX 控件的主干代码。PtInCircle 确定传递给控件的坐标是在圆的内部还是外部。此过程也可用于添加其他自定义方法。用自定义方法名及其参数替换 PtInCircle 方法名和参数。
注意 此例使用“事件”一文中的
InCircle
函数。有关此函数的更多信息,请参见文章
MFC ActiveX 控件:向 ActiveX 控件添加自定义事件。
使用“添加方法向导”添加 PtInCircle 自定义方法
- 加载控件的项目。
- 在“类视图”中展开控件的库节点。
- 右击控件的接口节点(库节点的第二个节点)打开快捷菜单。
- 在快捷菜单中单击“添加”,然后单击“添加方法”。
此操作将打开“添加方法向导”。
- 在“方法名称”框中,键入“PtInCircle”。
- 在“内部名称”框中,键入方法的内部函数名或使用默认值(此例中为
PtInCircle
)。 - 在“返回类型”框中,单击方法的返回类型“VARIANT_BOOL”。
- 使用“参数类型”和“参数名”控件,添加一个称为
xCoord
的参数(OLE_XPOS_PIXELS 类型)。 - 使用“参数类型”和“参数名”控件,添加一个称为
yCoord
的参数(OLE_YPOS_PIXELS 类型)。 - 单击“完成”。
“添加方法向导”对自定义方法的更改
当您添加自定义方法时,“添加方法向导”对控件类头 (.H) 文件和实现 (.CPP) 文件进行一些更改。下列代码行被添加到控件类头 (.H) 文件中的调度映射声明:
VARIANT_BOOL PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);
此代码声明一个称为 PtInCircle
的调度方法处理程序。控件用户可以使用外部名称 PtInCircle 调用此函数。
下列代码行被添加到控件的 .IDL 文件:
[id(1), helpstring("method PtInCircle")] VARIANT_BOOL PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);
此行为 PtInCircle 方法分配一个特定的 ID 号,即该方法在“添加方法向导”方法和属性列表中的位置。由于自定义方法是用“添加方法向导”添加的,此方法的项自动添加到项目的 .IDL 文件。
另外,下列代码行(位于控件类的实现 (.CPP) 文件中)被添加到控件的调度映射:
DISP_FUNCTION(CSampleCtrl, "PtInCircle", PtInCircle, VARIANT_BOOL, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)
DISP_FUNCTION 宏将 PtInCircle 方法映射到控件的处理函数 PtInCircle
、将返回类型声明为 VARIANT_BOOL 并声明传递给 PtInCircle
的 VTS_XPOS_PIXELS 和 VTS_YPOSPIXELS 类型的两个参数。
最后,“添加方法向导”将存根 (stub) 函数 CSampleCtrl::PtInCircle
添加到控件的实现 (.CPP) 文件的末尾。为使 PtInCircle
按前面介绍的方式运行,必须对其做如下修改:
VARIANT_BOOL CSampleCtrl::PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord) { return InCircle(CPoint(xCoord, yCoord)); }