属性映射宏

这些宏定义属性映射和条目。

名称 描述
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。 IPerPropertyBrowsingImplIPersistPropertyBagImplIPersistStreamInitImplISpecifyPropertyPagesImpl 类使用属性映射来检索和设置此信息。

使用 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 的示例。

另请参阅