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

自定义方法与标准方法的不同之处在于,它们尚未由COleControl实现。 必须为添加到控件的每个自定义方法提供实现。

重要

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

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

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

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

注释

此示例使用来自文章“Events”的 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,并声明两个参数类型为VTS_XPOS_PIXELSVTS_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);
}

另请参阅

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