vs2017开发ActiveX(主讲OCX)(九)、添加自定义方法

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

添加自定义方法

前言

备注:本文所介绍方法,vs2017已经不支持,仅是因教程连贯需要,vs2017以前的版本如vs2015都是支持的,如有需要的同学可以继续往下看。
自定义方法与常用方法的不同之处在于它们尚未由COleControl实现。 您必须为添加到控件的每个自定义方法提供实现。
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号,该方法在Add Method Wizard方法和属性列表中的位置。 由于添加方法向导用于添加自定义方法,因此它的条目会自动添加到项目的.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);
}

猜你喜欢

转载自blog.csdn.net/y601500359/article/details/92831456
今日推荐