IOleInPlaceSiteEx
COM公式ドキュメント
アクティブ化および非アクティブ化を通知するメソッドの追加セットを提供します。これにより、オブジェクトのアクティブ化および非アクティブ化の際に画面上で不要なちらつきが発生することを回避できます。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
アクティブ化時に自身を再描画する必要があるかどうかを判断するために、埋め込みオブジェクトから呼び出されます。
| pfNoRedraw | BOOL* | out | 現在の再描画状態を受け取る変数へのポインターです。オブジェクトがアクティブ化時に自身を再描画する必要がない場合、状態は TRUE になり、それ以外の場合は FALSE になります。ウィンドウレスオブジェクトは通常、このパラメーターで返される値を必要としないため、NULL ポインターを渡して、コンテナーがこの値を計算する負担を軽減できます。 |
| dwFlags | DWORD | in | オブジェクトがウィンドウレスオブジェクトとしてアクティブ化されるかどうかを示します。このパラメーターは ACTIVATEFLAGS 列挙型の値を取ります。ウィンドウレスオブジェクトの詳細については、IOleInPlaceSiteWindowless を参照してください。 |
戻り値
コンテナーがインプレースアクティブ化を許可する場合、このメソッドは S_OK を返します。 その他に返される可能性のある値は次のとおりです。
| 戻り値 | 説明 |
|---|---|
| 予期しないエラーが発生しました。 |
解説(Remarks)
このメソッドは IOleInPlaceSite::OnInPlaceActivate を置き換えます。古いメソッドを使用する場合、オブジェクトはアクティブ化時に常に自身を再描画する必要があります。
ウィンドウレスオブジェクトは、ウィンドウレスとしてアクティブ化されるかどうかをコンテナーに通知するために、IOleInPlaceSite::OnInPlaceActivate の代わりにこのメソッドを使用する必要があります。
実装者への注意
コンテナーは、pfNoRedraw に返す適切な値を決定するために、オブジェクトの無効化状態、その z オーダー、クリッピング、およびその他の関連するパラメーターを慎重に確認する必要があります。コンテナーは、IOleInPlaceObjectWindowless インターフェイスの GetWindow メソッドを繰り返し呼び出す代わりに、ACTIVATEFLAGS 列挙型の値をキャッシュできます。
非アクティブ化時にオブジェクトを再描画する必要があるかどうかをコンテナーに通知します。
| fNoRedraw | BOOL | in | TRUE の場合、コンテナーは非アクティブ化の完了後にオブジェクトを再描画する必要はありません。FALSE の場合、非アクティブ化の後にオブジェクトを再描画する必要があります。 |
戻り値
このメソッドは成功時に S_OK を返します。その他に返される可能性のある値は次のとおりです。
| 戻り値 | 説明 |
|---|---|
| 予期しないエラーが発生しました。 |
解説(Remarks)
このメソッドは IOleInPlaceSite::OnInPlaceDeactivate を置き換えます。古いメソッドを使用する場合、オブジェクトは非アクティブ化時に常に再描画する必要があります。
オブジェクトが UI アクティブ状態に入ろうとしていることをコンテナーに通知します。
戻り値
オブジェクトがアクティブ化プロセスを続行して IOleInPlaceSite::OnUIActivate を呼び出せる場合、このメソッドは S_OK を返します。その他に返される可能性のある値は次のとおりです。
| 戻り値 | 説明 |
|---|---|
| オブジェクトは UI アクティブ状態に入ることができません。オブジェクトは IOleInPlaceSite::OnUIDeactivate を呼び出す必要があります。これにより、コンテナーはフォーカスを復元するために必要な処理を実行できます。 | |
| 操作が失敗しました。 |
解説(Remarks)
オブジェクトは、UI アクティブ状態に入ることができるかどうかを判断し、この遷移を行おうとしていることをコンテナーに通知するために、このメソッドを呼び出します。コンテナーは、たとえばエンドユーザーが操作をキャンセルした場合や、現在アクティブなオブジェクトがアクティブ状態を手放さない場合に、この要求を拒否するために S_FALSE を返すことができます。
オブジェクトが IOleInPlaceSiteEx::RequestUIActivate を呼び出さない場合、コンテナーはデータの検証を処理し、IOleInPlaceSite::OnUIActivate から Enter イベントと Exit イベントを発生させます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IOleInPlaceSiteEx "{9C2CAD80-3424-11CF-B670-00AA004CD6D8}" #usecom global IOleInPlaceSiteEx IID_IOleInPlaceSiteEx "{}" #comfunc global IOleInPlaceSiteEx_OnInPlaceActivateEx 15 var,int #comfunc global IOleInPlaceSiteEx_OnInPlaceDeactivateEx 16 int #comfunc global IOleInPlaceSiteEx_RequestUIActivate 17 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IOleInPlaceSiteEx "{9C2CAD80-3424-11CF-B670-00AA004CD6D8}" #usecom global IOleInPlaceSiteEx IID_IOleInPlaceSiteEx "{}" #comfunc global IOleInPlaceSiteEx_OnInPlaceActivateEx 15 sptr,int #comfunc global IOleInPlaceSiteEx_OnInPlaceDeactivateEx 16 int #comfunc global IOleInPlaceSiteEx_RequestUIActivate 17 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。