添加自定义方法
前言
备注:本文所介绍方法,vs2017已经不支持,仅是因教程连贯需要,vs2017以前的版本如vs2015都是支持的,如有需要的同学可以继续往下看。
自定义方法与常用方法的不同之处在于它们尚未由COleControl实现。 您必须为添加到控件的每个自定义方法提供实现。
ActiveX控件用户可以随时调用自定义方法来执行特定于控件的操作。自定义方法的调度映射条目的格式为DISP_FUNCTION。
使用“添加方法向导”添加自定义方法
以下过程演示如何将自定义方法PtInCircle添加到ActiveX控件的框架代码中。 PtInCircle确定传递给控件的坐标是在圆的内部还是外部。此相同的过程也可用于添加其他自定义方法。将您的自定义方法名称及其参数替换为PtInCircle方法名称和参数。
注意 此示例使用文章Events中的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号,该方法在Add Method Wizard方法和属性列表中的位置。 由于添加方法向导用于添加自定义方法,因此它的条目会自动添加到项目的.IDL文件中。
此外,位于控件类的实现(.CPP)文件中的以下行将添加到控件的调度映射中:
DISP_FUNCTION_ID(CMyAxUICtrl, "PtInCircle", dispidPtInCircle, PtInCircle, VT_BOOL, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)
DISP_FUNCTION宏将方法PtInCircle映射到控件的处理函数PtInCircle,将返回类型声明为VARIANT_BOOL,并声明要传递给PtInCircle的两个VTS_XPOS_PIXELS和VTS_YPOSPIXELS类型的参数。
最后,添加方法向导将子函数CSampleCtrl :: PtInCircle添加到控件实现(.CPP)文件的底部。 要使PtInCircle如前所述起作用,必须按如下方式进行修改:
VARIANT_BOOL CMyAxUICtrl::PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CPoint point(xCoord, yCoord);
return InCircle(point);
}