屬性對應巨集
這些巨集會定義屬性對應和專案。
名稱 | 描述 |
---|---|
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]屬性描述。
成員
[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巨集會標示結尾。
範例
下列範例會將 的專案 IMyDual1
分組,後面接著 的專案 IMyDual2
。 依雙重介面分組可改善效能。
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的範例。