次の方法で共有


プロパティ マップに関するマクロ

これらのマクロでは、プロパティ マップとエントリを定義します。

名前 説明
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 を格納します。 クラス IPerPropertyBrowsingImplIPersistPropertyBagImplIPersistStreamInitImpl、および 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 の例を参照してください。

関連項目

マクロ