MFC ActiveX 控件:添加自定义属性

自定义属性与常用属性与自定义属性不是 COleControl 类中实现。 自定义特性可用于公开 ActiveX 控件的某个状态或外观。使用控件的程序员。

本文介绍如何添加自定义属性。ActiveX 控件使用"添加属性向导并说明发生的代码更改。 主题包括:

  • 使用添加属性向导的自定义属性

  • 添加属性向导用于自定义属性更改

自定义属性以实现四种变化形式:成员变量,并通知,get/set 方法的成员变量和参数化。

  • 实现成员变量

    此实现表示属性的状态,在控件类的成员变量。 请使用变量成员的实现,知道当不重要的属性值发生更改。 三个类型,此实现将创建属性的最少支持的代码。 成员变量相等比较实现计划映射项宏是 DISP_PROPERTY

  • 通知的实现的成员变量

    此实现中添加属性向导和通知函数创建的成员变量。 在属性值更改后,通知函数由框架自动调用。 中用于通知实现的成员变量,需要通知,则更改属性值。 因为它要求一函数调用,此实现需要更多时间。 此实现的计划映射项宏是 DISP_PROPERTY_NOTIFY

  • get/set 方法实现

    此实现包含一对在控件类的成员函数。 get/set 方法实现自动调用获取成员函数,而该控件的用户请求属性的当前值和集合成员函数,当属性更改控件的用户请求时。 请使用此实现在运行时,需要计算属性的值,该控件验证的用户传递的值。更改实际属性之前时或者实现一种或只写读的特性类型。 此实现的计划映射项宏是 DISP_PROPERTY_EX。 以下几节,使用添加属性向导的自定义属性,使用 CircleOffset 自定义属性演示此实现。

  • 参数化的实现

    参数化实现由添加属性向导支持。 参数化的属性 (有时调用属性数组) 可用于通过一个属性访问控件的一组值。 此实现的计划映射项宏是 DISP_PROPERTY_PARAM。 有关实现此类型的更多信息,请参见位于文章:实现参数化的属性 的 ActiveX 控件高级主题。

使用添加属性向导的自定义属性

下面的过程演示添加自定义属性,CircleOffset,使用的 get/set 方法实现。 CircleOffset 自定义属性可使控件的用户控件偏移的边框中心的圆。 添加的自定义属性的 get/set 方法除方法外的实现非常相似。

此相同过程也可以添加所需的任何其他自定义属性。 替换 CircleOffset 属性名和参数重写自定义属性名称。

使用"添加属性向导,CircleOffset 添加自定义属性

  1. 加载控件项目。

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

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

  4. 从快捷菜单中,单击**“添加”,然后单击“添加属性”**。

    这会打开 添加属性向导

  5. 属性名框中,CircleOffset。

  6. 对于 Implementation Type,单击 Get/Set Methods

  7. 属性类型 框中,选择 short

  8. 键入唯一名称 get 和 set 函数或接受默认名称。

  9. 单击**“完成”**。

添加属性向导用于自定义属性更改

当您添加 CircleOffset 自定义特性时,添加属性向导对标题进行修改 (。H) 和控件的实现 (.cpp) 文件分类。

下面一行添加到。声明两个函数 (H 文件调用 GetCircleOffset 和 SetCircleOffset:

SHORT GetCircleOffset(void);
void SetCircleOffset(SHORT newVal);

下列代码行添加到控件的 .IDL 文件:

[id(2), helpstring("property CircleOffset")] SHORT CircleOffset;
[id(3), helpstring("property MyProperty")] SHORT MyProperty;

此行将 CircleOffset 属性特定 ID 号,将在"添加属性向导的方法和属性列表的方法的位置。

此外,下面一行添加到计划映射 (在控件类的 .cpp 文件) CircleOffset 属性映射到该控件的两种处理程序函数:

DISP_PROPERTY_EX_ID(CMyAxUICtrl, "CircleOffset", dispidCircleOffset, GetCircleOffset, SetCircleOffset, VT_I2)

最后,GetCircleOffset 的实现和 SetCircleOffset 函数被添加到 .cpp 控件的文件尾。 在许多情况下,您将修改获取函数返回属性值。 集合函数通常将包含应执行或中代码,在属性更改之前。

void CMyAxUICtrl::SetCircleOffset(SHORT /*newVal*/)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());

   // TODO: Add your property handler code here

   SetModifiedFlag();
}

请注意添加属性向导"自动添加一个调用,为 SetModifiedFlag,到集合函数的主体。 调用此函数。指示控件为已修改。 如果修改了新的控件,其状态会保存,当容器保存。 应调用此函数,只要属性,作为保存控件的持久状态的一部分,更改值。

请参见

参考

COleControl 类

概念

MFC ActiveX 控件

MFC ActiveX 控件:属性

MFC ActiveX 控件:方法