MFC ActiveX コントロール : アンビエント プロパティへのアクセス
更新 : 2007 年 11 月
ここでは、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 つ以上のアンビエント プロパティが変更されていますが、変更されたプロパティを特定する情報がないことを示します。