自定义方法与标准方法的不同之处在于,它们尚未由COleControl
实现。 必须为添加到控件的每个自定义方法提供实现。
重要
ActiveX 是一项不推荐用于新开发的旧技术。 有关取代 ActiveX 的新式技术的详细信息,请参阅 ActiveX 控件。
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 号码,用于指示该方法在“添加方法向导”中的方法与属性列表中的位置。 由于使用了“添加方法向导”来添加自定义方法,其条目被自动添加到项目的.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);
}