IViewObject2
COM公式ドキュメント
オブジェクトの指定されたビューに対する描画サイズを返す、IViewObject インターフェイスの拡張です。IOleObject::GetExtent の代わりにこのメソッドを呼び出すことで、オブジェクトがまだ実行されていない場合に実行を防ぐことができます。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
指定されたビュー オブジェクトが、指定されたターゲット デバイス上に描画される際のサイズを取得します。
| dwDrawAspect | DVASPECT | in | サイズを取得したいオブジェクトの、要求するビューです。指定できる値は DVASPECT 列挙体および DVASPECT2 列挙体から取ります。最適化された描画インターフェイスをサポートする新しいオブジェクトおよびコンテナーは、DVASPECT2 列挙体の値をサポートすることに注意してください。最適化された描画インターフェイスをサポートしない古いオブジェクトおよびコンテナーは、DVASPECT2 をサポートしない場合があります。 |
| lindex | INT | in | 対象とするオブジェクトの部分です。現在、指定できる値は -1 のみです。 |
| ptd | DVTARGETDEVICE* | in | オブジェクトのサイズを返す対象となるターゲット デバイスを定義する DVTARGETDEVICE 構造体へのポインターです。 |
| lpsizel | SIZE* | out | オブジェクトのサイズが返される先へのポインターです。 |
戻り値
このメソッドは成功時に S_OK を返します。その他に返される可能性のある値には、次のものがあります。
| 戻り値 | 説明 |
|---|---|
| 適切なキャッシュが利用できません。 |
解説(Remarks)
OLE が提供する IViewObject2::GetExtent の実装は、ビュー オブジェクトのサイズをキャッシュ内から検索します。
IOleObject インターフェイスの IOleObject::GetExtent メソッドは、IViewObject2::GetExtent と同じ情報の一部を提供します。
このメソッドは、DVASPECT2 のすべての新しいアスペクトに対して、DVASPECT_CONTENT と同じサイズを返す必要があります。IOleObject::GetExtent も同様に動作する必要があります。
dwAspect に新しいアスペクトのいずれかが要求された場合、このメソッドは失敗するか、DVASPECT_CONTENT アスペクトの場合と同じ矩形を返すかのいずれかにできます。
呼び出し元への注意
オブジェクトがまだ実行されていない場合に実行を防ぐには、描画される表示のサイズを判定するために IOleObject::GetExtent ではなく IViewObject2::GetExtent を呼び出すことができます。Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IViewObject2 "{00000127-0000-0000-C000-000000000046}" #usecom global IViewObject2 IID_IViewObject2 "{}" #comfunc global IViewObject2_GetExtent 9 int,int,var,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IViewObject2 "{00000127-0000-0000-C000-000000000046}" #usecom global IViewObject2 IID_IViewObject2 "{}" #comfunc global IViewObject2_GetExtent 9 int,int,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。