Win32 API 日本語リファレンス
ホームSystem.Ole › IQuickActivate

IQuickActivate

COM
IIDcf51ed10-62fe-11cf-bf86-00a0c9034836継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

コントロールとコンテナーが、コントロールの読み込み時のパフォーマンスのボトルネックを回避できるようにします。コントロールとそのコンテナーの間で行われる読み込み時または初期化時のハンドシェイクを、単一の呼び出しにまとめます。

メソッド 3

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT QuickActivate(QACONTAINER* pQaContainer, QACONTROL* pQaControl)

コントロールをクイックアクティブ化します。

pQaContainerQACONTAINER*inコンテナーに関する情報を格納した QACONTAINER 構造体へのポインター。
pQaControlQACONTROL*inoutコントロールがコンテナーへ自身に関する情報を返すために設定する QACONTROL 構造体へのポインター。このメソッドを呼び出すコンテナーは、この構造体のためのメモリを確保しておく必要があります。

戻り値

メソッドが成功した場合、戻り値は S_OK です。それ以外の場合は E_FAIL です。

解説(Remarks)

コントロールが IQuickActivate をサポートしていない場合、コンテナーはコントロールを読み込む際に一定のハンドシェイク操作を行います。コンテナーはコントロール上の特定のインターフェイスを呼び出し、コントロールは今度はコンテナーのクライアントサイト上の特定のインターフェイスにコールバックします。まず、コンテナーはコントロールオブジェクトを作成し、QueryInterface を呼び出して必要なインターフェイスを問い合わせます。次に、コンテナーはコントロール上で IOleObject::SetClientSite を呼び出し、自身のクライアントサイトへのポインターを渡します。続いて、コントロールはこのサイト上で QueryInterface を呼び出し、追加で必要なインターフェイスへのポインターを取得します。

QuickActivate メソッドを使用すると、コンテナーは QACONTAINER 構造体へのポインターを渡します。この構造体には、コントロールが必要とするインターフェイスへのポインターと、コントロールが必要とする可能性のあるいくつかのアンビエントプロパティの値が含まれています。戻り時に、コントロールは QACONTROL 構造体へのポインターを渡します。この構造体には、コンテナーが必要とするコントロール自身のインターフェイスへのポインターと、追加の状態情報が含まれています。

IPersist*::Load および IPersist*::InitNew メソッドは、クイックアクティブ化が行われた後に呼び出す必要があります。コントロールは、クイックアクティブ化中にコンテナーのシンクへの接続を確立する必要があります。ただし、これらの接続は IPersist*::Load または IPersist*::InitNew が呼び出されるまで有効になりません。

vtbl 4 HRESULT SetContentExtent(SIZE* pSizel)

コントロールのコンテンツ範囲を設定します。

pSizelSIZE*inコンテンツ範囲のサイズ。

戻り値

メソッドが成功した場合、戻り値は S_OK です。それ以外の場合は E_FAIL です。

vtbl 5 HRESULT GetContentExtent(SIZE* pSizel)

コントロールのコンテンツ範囲を取得します。

pSizelSIZE*outコンテンツ範囲のサイズを格納する構造体へのポインター。

戻り値

メソッドが成功した場合、戻り値は S_OK です。それ以外の場合は E_FAIL です。

解説(Remarks)

SIZEL 構造体は Wtypes.h で次のように定義されています。

typedef struct tagSIZEL
    {
    LONG cx;
    LONG cy;
    } 	SIZEL;

typedef struct tagSIZEL *PSIZEL;

typedef struct tagSIZEL *LPSIZEL;
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IQuickActivate "{CF51ED10-62FE-11CF-BF86-00A0C9034836}"
#usecom global IQuickActivate IID_IQuickActivate "{}"
#comfunc global IQuickActivate_QuickActivate     3 var,var
#comfunc global IQuickActivate_SetContentExtent  4 var
#comfunc global IQuickActivate_GetContentExtent  5 var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。