MFC ActiveX 控件:添加自定义方法
自定义方法不同于常用方法,因为它们尚未由 COleControl
实现。 必须为添加到控件的每个自定义方法提供实现。
重要
ActiveX 是旧技术,不应用于新开发。 有关取代 ActiveX 的新式技术的详细信息,请参阅 ActiveX 控件。
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_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);
}