次の方法で共有


MFC ActiveX コントロール : アンビエント プロパティへのアクセス

この記事では、ActiveX コントロールがそのコントロール コンテナーのアンビエント プロパティにアクセスする方法について説明します。

コントロールがそのコンテナーに関する情報を取得するには、コンテナーのアンビエント プロパティにアクセスします。 これらのプロパティによって視覚的特性、たとえばコンテナーの背景色、コンテナーで使用されている現在のフォント、操作上の特性 (コンテナーが現在ユーザー モードかデザイナー モードかなど) が公開されます。 コントロールはアンビエント プロパティを使用して、自身の外観と動作を、自身が埋め込まれている特定のコンテナーに合わせて調整できます。 ただし、コントロールは、そのコンテナーが特定のすべてのアンビエント プロパティをサポートすることを想定してはいけません。 実際、コンテナーによっては、アンビエント プロパティにまったく対応していないこともあります。 アンビエント プロパティがない場合、コントロールは妥当な既定値を想定する必要があります。

アンビエント プロパティにアクセスするには、COleControl::GetAmbientProperty を呼び出します。 この関数は、アンビエント プロパティのディスパッチ ID を、最初のパラメーターとして想定します (OLECTL.H ファイルでは、アンビエント プロパティの標準セットに対してディスパッチ ID が定義されます)。

GetAmbientProperty 関数のパラメーターは、ディスパッチID、想定されるプロパティ型を示すバリアント タグ、値が返されるメモリへのポインターです。 このポインターが参照するデータ型は、バリアント タグによって異なります。 関数は、コンテナーがそのプロパティをサポートしている場合は TRUE、それ以外の場合は FALSE を返します。

次のコード例では、"UserMode" と呼ばれるアンビエント プロパティの値を取得します。プロパティがコンテナーでサポートされていない場合、既定値は TRUE と見なされます。

BOOL bUserMode;
if (!GetAmbientProperty(DISPID_AMBIENT_USERMODE, VT_BOOL, &bUserMode))
bUserMode = TRUE;

ここでは、COleControl には、一般的に使用される多くのアンビエント プロパティにアクセスし、プロパティが使用できない場合は適切な既定値を返すヘルパー関数が用意されています。 これらのヘルパー関数を次に示します。

(コンテナーのアクションによって) アンビエント プロパティの値が変更された場合は、コントロールの OnAmbientPropertyChanged メンバー関数が呼び出されます。 このような通知を処理するには、このメンバー関数をオーバーライドします。 OnAmbientPropertyChanged のパラメーターは、影響を受けるアンビエント プロパティのディスパッチ ID です。 このディスパッチ ID の値が DISPID_UNKNOWN の場合がありますが、これは 1 つ以上のアンビエント プロパティが変更されたが、どのプロパティが影響を受けたかに関する情報が使用できないことを示します。

関連項目

MFC ActiveX コントロール