プロパティ マップに関するマクロ
これらのマクロでは、プロパティ マップとエントリを定義します。
名前 | 説明 |
---|---|
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] プロパティのバリアント型を指定します。
解説
このマクロは、指定されたデータ メンバーを永続化します。
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 は必要ありません。
Note
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 の例を参照してください。