MFC ActiveX 控件:添加自定义方法

自定义方法不同于常用方法,因为它们尚未由 COleControl 实现。 必须为添加到控件的每个自定义方法提供实现。

重要

ActiveX 是旧技术,不应用于新开发。 有关取代 ActiveX 的新式技术的详细信息,请参阅 ActiveX 控件

ActiveX 控件用户可以随时调用自定义方法来执行特定于控件的操作。 自定义方法的调度映射条目的格式为 DISP_FUNCTION。

使用添加方法向导添加自定义方法

以下过程演示如何将自定义方法 PtInCircle 添加到 ActiveX 控件的框架代码。 PtInCircle 确定传递给控件的坐标是在圆圈内还是圆圈外。 此相同过程还可用于添加其他自定义方法。 将你的自定义方法名称及其参数替换为 PtInCircle 方法名称和参数。

注意

此示例使用“事件”一文中的 InCircle 函数。 有关此函数的详细信息,请参阅,请参阅 MFC ActiveX 控件:向 ActiveX 控件添加自定义事件一文。

使用添加方法向导添加 PtInCircle 自定义方法

  1. 加载控件的项目。

  2. 在“类视图”中,展开控件的库节点。

  3. 右键单击控件的接口节点(库节点的第二个节点)以打开快捷菜单。

  4. 在快捷菜单中单击“添加”,然后单击“添加方法”。

    这会打开添加方法向导。

  5. 在“方法名称”框中,键入 PtInCircle

  6. 在“内部名称”框中,键入此方法的内部函数名称或使用默认值(在本例中为 PtInCircle)

  7. 在“返回类型”框中,单击“VARIANT_BOOL”作为此方法的返回类型

  8. 使用“参数类型”和“参数名称”控件,添加名为“xCoord”的参数(类型为 OLE_XPOS_PIXELS)

  9. 使用“参数类型”和“参数名称”控件,添加名为“yCoord”的参数(类型为 OLE_YPOS_PIXELS)

  10. 单击“完成” 。

针对自定义方法的添加方法向导变更

添加自定义方法时,添加方法向导会对控件类标头 (.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);
}

另请参阅

MFC ActiveX 控件
“类视图”和“对象浏览器”图标