次の方法で共有


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