IDirectManipulationContent
COM公式ドキュメント
ビューポート内のコンテンツをカプセル化します。コンテンツは、ビューポート内でクリップされる視覚的なサーフェスを表します。
解説(Remarks)
システムは IDirectManipulationContent の実装を提供します。
メソッド 8
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
コンテンツの境界矩形を、ビューポートの境界矩形(定義されている場合)を基準として取得します。
| contentSize | RECT* | out | コンテンツの境界矩形。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
境界矩形が SetContentRect を使用して設定されていない場合は、UI_E_VALUE_NOT_SET が返されます。ただし、実際のコンテンツ矩形は (-FLT_MAX, -FLT_MAX, FLT_MAX, FLT_MAX) です。
コンテンツの境界矩形を、そのビューポートを基準として指定します。
| contentSize | RECT* | in | コンテンツの境界矩形。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
コンテンツを含むビューポートを取得します。
| riid | GUID* | in | 使用するインターフェースの識別子への参照。 |
| object | void** | out | ビューポートオブジェクト。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
このコンテンツに設定されているタグオブジェクトを取得します。
| riid | GUID* | in | 使用するインターフェースの識別子への参照。タグオブジェクトは通常このインターフェースを実装します。 |
| object | void** | outoptional | タグオブジェクト。 |
| id | DWORD* | outoptional | タグのID部分。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
GetTag と SetTag は、両者間の外部マッピングを用いずに外部の COM オブジェクトをコンテンツに関連付ける際に役立ちます。また、コンテンツに対して生成されるコールバックへ情報を渡すためにも使用できます。
GetTag は、指定したインターフェースに対するタグ値を照会し、そのインターフェースへのポインターを返します。
タグは、整数の ID(id)と Component Object Model (COM) オブジェクト(object)の組み合わせです。アプリケーションが動作(モーション)を識別するために使用できます。 パラメーターは省略可能であるため、メソッドはタグの両方の部分、識別子部分、またはタグオブジェクトのいずれかを返すことができます。
例
次の例は、このメソッドの構文を示します。
IUnknown* pObject;
UINT32 id;
HRESULT hr = pContent->GetTag(IID_PPV_ARGS(&pObject), &id);
コンテンツのタグオブジェクトを指定します。
| object | IUnknown* | inoptional | タグのオブジェクト部分。 |
| id | DWORD | in | タグのID部分。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
GetTag と SetTag は、両者間の外部マッピングを用いずに外部の COM オブジェクトをコンテンツに関連付ける際に役立ちます。また、コンテンツに対して生成されるコールバックへ情報を渡すためにも使用できます。
タグは、整数の ID(id)と Component Object Model (COM) オブジェクト(object)の組み合わせです。アプリケーションがコンテンツに関連付けられた任意のオブジェクトを保存および取得するために使用できます。
object パラメーターは省略可能であるため、メソッドは識別子部分のみを設定することもできます。
コンテンツに適用される最終的な変換を取得します。
| matrix | FLOAT* | out | 変換行列。 |
| pointCount | DWORD | in | 変換行列のサイズ。すべての direct manipulation 変換には 3x2 行列が使用されるため、この値は常に 6 です。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
この変換には、操作(manipulation)および慣性(inertia)の間に適用されるその他のカスタム曲線が含まれる場合があります。
この変換には、コンテンツ変換と、SyncContentTransform で設定された同期変換の両方が含まれます。
コンテンツに適用される変換を取得します。
| matrix | FLOAT* | out | 変換行列。 |
| pointCount | DWORD | in | 変換行列のサイズ。すべての direct manipulation 変換には 3x2 行列が使用されるため、この値は常に 6 です。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
この変換には、操作(manipulation)および慣性(inertia)の間の既定のオーバーパンおよびバウンス曲線が含まれます。
この変換には、SyncContentTransform で設定された同期変換は含まれません。
このメソッドが返るとき、matrix の形式は次のとおりです。
matrix matrix matrix matrix matrix matrix
出力変換を維持しながらコンテンツ変換を変更します。
| matrix | FLOAT* | in | 変換行列。 |
| pointCount | DWORD | in | 変換行列のサイズ。すべての direct manipulation 変換には 3x2 行列が使用されるため、この値は常に 6 です。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
ビューポートの状態が DIRECTMANIPULATION_RUNNING、DIRECTMANIPULATION_INERTIA、または DIRECTMANIPULATION_SUSPENDED の場合、このメソッドは失敗します。
このメソッドは、コンテンツの視覚的な出力変換を保持しつつ、操作(manipulation)の終了時にコンテンツ変換の上にさらに変換を適用したい場合に役立ちます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IDirectManipulationContent "{B89962CB-3D89-442B-BB58-5098FA0F9F16}" #usecom global IDirectManipulationContent IID_IDirectManipulationContent "{}" #comfunc global IDirectManipulationContent_GetContentRect 3 var #comfunc global IDirectManipulationContent_SetContentRect 4 var #comfunc global IDirectManipulationContent_GetViewport 5 var,sptr #comfunc global IDirectManipulationContent_GetTag 6 var,sptr,var #comfunc global IDirectManipulationContent_SetTag 7 sptr,int #comfunc global IDirectManipulationContent_GetOutputTransform 8 var,int #comfunc global IDirectManipulationContent_GetContentTransform 9 var,int #comfunc global IDirectManipulationContent_SyncContentTransform 10 var,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IDirectManipulationContent "{B89962CB-3D89-442B-BB58-5098FA0F9F16}" #usecom global IDirectManipulationContent IID_IDirectManipulationContent "{}" #comfunc global IDirectManipulationContent_GetContentRect 3 sptr #comfunc global IDirectManipulationContent_SetContentRect 4 sptr #comfunc global IDirectManipulationContent_GetViewport 5 sptr,sptr #comfunc global IDirectManipulationContent_GetTag 6 sptr,sptr,sptr #comfunc global IDirectManipulationContent_SetTag 7 sptr,int #comfunc global IDirectManipulationContent_GetOutputTransform 8 sptr,int #comfunc global IDirectManipulationContent_GetContentTransform 9 sptr,int #comfunc global IDirectManipulationContent_SyncContentTransform 10 sptr,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。