属性映射宏
这些宏定义属性映射和条目。
名称 | 描述 |
---|---|
BEGIN_PROP_MAP | 标记 ATL 属性映射的开头。 |
PROP_DATA_ENTRY | 指示 ActiveX 控件的盘区或维度。 |
PROP_ENTRY_TYPE | 将属性说明、属性 DISPID 和属性页 CLSID 输入属性映射中。 |
PROP_ENTRY_TYPE_EX | 将属性说明、属性 DISPID、属性页 CLSID 和 IDispatch IID 输入属性映射中。 |
PROP_PAGE | 将属性页 CLSID 输入属性映射中。 |
END_PROP_MAP | 标记 ATL 属性映射的末尾。 |
要求
标头:atlcom.h
BEGIN_PROP_MAP
标记对象属性映射的开头。
BEGIN_PROP_MAP(theClass)
参数
theClass
[in] 指定包含属性映射的类。
注解
属性映射存储属性说明、属性 DISPID、属性页 CLSID 和 IDispatch
IID。 IPerPropertyBrowsingImpl、IPersistPropertyBagImpl、IPersistStreamInitImpl 和 ISpecifyPropertyPagesImpl 类使用属性映射来检索和设置此信息。
使用 ATL 项目向导创建对象时,向导将通过指定BEGIN_PROP_MAP 并后跟 END_PROP_MAP 来创建空的属性映射。
BEGIN_PROP_MAP 不会保存属性映射的盘区(即维度),因为使用属性映射的对象可能没有用户界面,因此它没有盘区。 如果对象是具有用户界面的 ActiveX 控件,则其具有盘区。 在这种情况下,必须在属性映射中指定 PROP_DATA_ENTRY 以提供盘区。
示例
BEGIN_PROP_MAP(CMyPropCtrl)
PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
PROP_ENTRY_TYPE("Property1", 1, CLSID_MyPropPage1, VT_BSTR)
PROP_ENTRY_TYPE_EX("Caption", DISPID_CAPTION, CLSID_MyPropPage2, IID_IMyDual1, VT_BSTR)
PROP_ENTRY_INTERFACE_CALLBACK("CorrectParamCallback", 0, CLSID_MyPropPage1, AllowedCLSID, VT_DISPATCH)
PROP_ENTRY_INTERFACE_CALLBACK_EX("CorrectParamCallbackEx", 1, IID_IMyDual1, CLSID_MyPropPage2, AllowedCLSID, VT_UNKNOWN)
PROP_PAGE(CLSID_MyPropPage3)
END_PROP_MAP()
PROP_DATA_ENTRY
指示 ActiveX 控件的盘区或维度。
PROP_DATA_ENTRY( szDesc, member, vt)
参数
szDesc
[in] 属性说明。
member
[in] 包含盘区的数据成员;例如 m_sizeExtent
。
vt
[in] 指定属性的 VARIANT 类型。
注解
此宏会使指定的数据成员持久保留。
创建 ActiveX 控件时,向导会在属性映射宏 BEGIN_PROP_MAP 和属性映射宏 END_PROP_MAP 之间插入此宏。
示例
在以下示例中,将持久保留对象 (m_sizeExtent
) 的盘区。
BEGIN_PROP_MAP(CMyWindow)
PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
END_PROP_MAP()
BEGIN_PROP_MAP(CMyCompositeCtrl)
PROP_DATA_ENTRY("Width", m_nWidth, VT_UI4)
PROP_DATA_ENTRY("Height", m_nHeight, VT_UI4)
END_PROP_MAP()
PROP_ENTRY_TYPE
使用此宏可将属性说明、属性 DISPID 和属性页 CLSID 输入到对象的属性映射中。
PROP_ENTRY_TYPE( szDesc, dispid, clsid, vt)
参数
szDesc
[in] 属性说明。
dispid
[in] 属性的 DISPID。
clsid
[in] 关联的属性页的 CLSID。 对于没有关联属性页的属性,请使用特殊值 CLSID_NULL。
vt
[in] 属性的类型。
备注
PROP_ENTRY 宏不安全且已弃用。 它已被替换为 PROP_ENTRY_TYPE。
BEGIN_PROP_MAP 宏标记属性映射的开头;END_PROP_MAP 宏标记属性映射的末尾。
示例
请参阅 BEGIN_PROP_MAP 的示例。
PROP_ENTRY_TYPE_EX
类似于 PROP_ENTRY_TYPE,但如果对象支持多个双重接口,它允许指定特定的 IID。
PROP_ENTRY_TYPE_EX( szDesc, dispid, clsid, iidDispatch, vt)
参数
szDesc
[in] 属性说明。
dispid
[in] 属性的 DISPID。
clsid
[in] 关联的属性页的 CLSID。 对于没有关联属性页的属性,请使用特殊值 CLSID_NULL。
iidDispatch
[in] 用于定义属性的双重接口的 IID。
vt
[in] 属性的类型。
备注
PROP_ENTRY_EX 宏不安全且已弃用。 它已被替换为 PROP_ENTRY_TYPE_EX。
BEGIN_PROP_MAP 宏标记属性映射的开头;END_PROP_MAP 宏标记属性映射的末尾。
示例
以下示例对后跟 IMyDual2
条目的 IMyDual1
条目进行分组。 按双重接口分组将提高性能。
BEGIN_PROP_MAP(CAtlEdit)
PROP_ENTRY_TYPE_EX("Caption", DISPID_CAPTION, CLSID_MyPropPage2, IID_IMyDual1, VT_BSTR)
PROP_ENTRY_TYPE_EX("Enabled", DISPID_ENABLED, CLSID_MyPropPage2, IID_IMyDual1, VT_BOOL)
PROP_ENTRY_TYPE_EX("Width", DISPID_DRAWWIDTH, CLSID_MyPropPage2, IID_IMyDual2, VT_UINT)
END_PROP_MAP()
PROP_PAGE
使用此宏可将属性页 CLSID 输入到对象的属性映射中。
PROP_PAGE(clsid)
参数
clsid
[in] 属性页的 CLSID。
注解
PROP_PAGE 类似于 PROP_ENTRY_TYPE,但不需要属性说明或 DISPID。
注意
如果已使用 PROP_ENTRY_TYPE 或 PROP_ENTRY_TYPE_EX 输入 CLSID,则无需使用 PROP_PAGE 输入其他条目。
BEGIN_PROP_MAP 宏标记属性映射的开头;END_PROP_MAP 宏标记属性映射的末尾。
示例
BEGIN_PROP_MAP(CMyCtrl)
OtherPropMapEntries
PROP_PAGE(CLSID_DatePage)
PROP_PAGE(CLSID_StockColorPage)
END_PROP_MAP()
END_PROP_MAP
标记对象属性映射的末尾。
END_PROP_MAP()
备注
使用 ATL 项目向导创建对象时,向导将通过指定BEGIN_PROP_MAP 并后跟 END_PROP_MAP 来创建空的属性映射。
示例
请参阅 BEGIN_PROP_MAP 的示例。