自定义方法不同于股票方法,因为它们尚未实现。COleControl
必须为添加到控件的每个自定义方法提供实现。
重要
ActiveX 是一项不推荐用于新开发的旧技术。 有关取代 ActiveX 的新式技术的详细信息,请参阅 ActiveX 控件。
ActiveX 控件用户可以随时调用自定义方法来执行特定于控件的作。 自定义方法的调度映射条目是窗体DISP_FUNCTION。
使用添加方法向导添加自定义方法
以下过程演示如何将自定义方法 PtInCircle 添加到 ActiveX 控件的框架代码。 PtInCircle 确定传递给控件的坐标是圆圈内部还是外部。 此相同过程还可用于添加其他自定义方法。 将自定义方法名称及其参数替换为 PtInCircle 方法名称和参数。
注释
此示例使用 InCircle
项目 Events 中的函数。 有关此函数的详细信息,请参阅 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
的控件用户调用。
以下行已添加到控件的行中。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的返回类型,并声明VTS_XPOS_PIXELS类型的两个参数,并将VTS_YPOSPIXELS传递给PtInCircle
它。
最后,添加方法向导将存根函数 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);
}