MFC ActiveX 控件:添加自定义属性
自定义属性与常用属性的不同之处在于自定义特性不由 COleControl 类已经实现。 自定义特性用于显示 Activex 控件的特定状态或外观。使用控件的程序员。
本文介绍如何将自定义属性设置为 Activex 控件使用 " 添加属性向导并说明中出现的代码修改。 主题包括:
使用添加属性向导的自定义属性
将特性添加自定义属性的向导更改
自定义特性中实现四个类型:成员变量,与请注意,访问的成员变量/设置方法,并参数化的。
成员变量实现
此实现表示属性的状态为控件类的成员变量。 请使用成员变量的实现,当知道无关紧要属性值更改时 三个类型,此实现创建最少支持属性的代码。 成员变量的实现的计划映射项宏是 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 自定义属性
加载您的控件的项目中。
在 " 类视图 " 中,展开您的控件库节点。
右击您的控件 (库节点的第二个节点接口节点) 打开快捷菜单。
从快捷菜单上,单击 添加 然后单击 添加属性。
这将打开 添加属性向导。
在 属性名 框中,键入 CircleOffset。
为 Implementation Type,单击 Get/Set Methods。
在 属性类型 框中,选择 不足。
键入唯一的名称。获取和设置功能或接受默认名称。
单击**“完成”**。
将特性添加自定义属性的向导更改
当您添加 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,到安装程序的函数体。 调用此功能指示控件为已修改。 如果修改了控件,其新状态要保存,当容器保存。 应调用此函数,每当属性,保存为控件的持久状态的一部分,更改值。