ここでは、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 には、よく使用されるアンビエント プロパティにアクセスできるヘルパー関数が用意されています。ヘルパー関数は、プロパティが使用できない場合に適切な既定値を返します。 用意されているヘルパー関数は次のとおりです。
-
注意
呼び出し元は、返されたフォントに対して Release( ) を呼び出す必要があります。
コンテナーの動作によってアンビエント プロパティの値が変更されると、コントロールの OnAmbientPropertyChanged メンバー関数が呼び出されます。 変更の通知を処理するには、このメンバー関数をオーバーライドします。 OnAmbientPropertyChanged のパラメーターは、変更されたアンビエント プロパティのディスパッチ ID です。 このディスパッチ ID の値が DISPID_UNKNOWN の場合は、1 つ以上のアンビエント プロパティが変更されていますが、変更されたプロパティを特定する情報がないことを示します。