次の方法で共有


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 コントロール