IDirectManipulationPrimaryContent
COM公式ドキュメント
ビューポート内のプライマリコンテンツをカプセル化します。
メソッド 9
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
慣性の終了位置に対するスナップポイントを一定の間隔で指定します。
| motion | DIRECTMANIPULATION_MOTION_TYPES | in | DIRECTMANIPULATION_MOTION_TYPES 列挙値のいずれか。 |
| interval | FLOAT | in | 各スナップポイント間の間隔。 |
| offset | FLOAT | in | SetSnapCoordinate で指定された座標からのオフセット。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
スナップポイントの位置はコンテンツ座標単位で指定します。
スナップポイントは SetSnapPoints または SetSnapInterval で指定します。
スナップポイントが無効な場合(たとえばコンテンツ境界の外側にある場合)は無視され、コンテンツは常にコンテンツ境界内に収まります。
既定ではスナップポイントは境界に設定されません。コンテンツを境界で停止させたい場合は、境界にスナップポイントを設定する必要があります。
SetSnapInterval で設定したスナップポイントは、間隔 0.0f を指定して SetSnapInterval を呼び出すことでクリアできます。
例
次の例では、X 方向の平行移動スナップポイントの座標系を原点に設定する方法を示します。スナップポイントは X 軸に沿って原点を起点として 45 ピクセルごとに設定されます。
HRESULT hr = SetSnapCoordinate(testWindow, 0, DIRECTMANIPULATION_MOTION_TRANSLATEX, DIRECTMANIPULATION_COORDINATE_ORIGIN, 0.0f);
hr = pContent->SetSnapInterval(DIRECTMANIPULATION_MOTION_TRANSLATEX, 45.0f, 0.0f);
慣性の静止位置に対するスナップポイントを指定します。
| motion | DIRECTMANIPULATION_MOTION_TYPES | in | DIRECTMANIPULATION_MOTION_TYPES 列挙値の 1 つ以上。DIRECTMANIPULATION_MOTION_TRANSLATE_X、DIRECTMANIPULATION_MOTION_TRANSLATE_Y、または DIRECTMANIPULATION_MOTION_ZOOM のみが許可されます。 |
| points | FLOAT* | inoptional | スナップ先となる、コンテンツ境界内のスナップポイントの配列。SetSnapCoordinate で設定した原点を基準として昇順で指定する必要があります。 |
| pointCount | DWORD | in | スナップポイントの配列のサイズ。0 より大きい必要があります。 |
戻り値
メソッドが成功した場合は S_OK を返します。スナップポイントに変更がない場合、このメソッドは S_FALSE を返すことがあります。それ以外の場合は HRESULT エラーコードを返します。無効なスナップポイントが指定された場合、既存のスナップポイントに影響が及ぶことがあります。
解説(Remarks)
スナップポイントが無効な場合(たとえばコンテンツ境界の外側にある場合)は無視され、コンテンツは常にコンテンツ境界内に収まります。
スナップポイントの種類を指定します。
| motion | DIRECTMANIPULATION_MOTION_TYPES | in | DIRECTMANIPULATION_MOTION_TYPES 列挙値の 1 つ以上。 |
| type | DIRECTMANIPULATION_SNAPPOINT_TYPE | in | DIRECTMANIPULATION_SNAPPOINT_TYPE 列挙値のいずれか。 DIRECTMANIPULATION_SNAPPOINT_TYPE_NONE に設定すると、SetSnapPoints または SetSnapInterval で指定したスナップポイントがクリアされます。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
スナップポイントまたはスナップ間隔の座標系を指定します。
| motion | DIRECTMANIPULATION_MOTION_TYPES | in | DIRECTMANIPULATION_MOTION_TYPES の値のいずれか。 |
| coordinate | DIRECTMANIPULATION_SNAPPOINT_COORDINATE | in | DIRECTMANIPULATION_SNAPPOINT_COORDINATE の値のいずれか。 motion が平行移動(DIRECTMANIPULATION_MOTION_TRANSLATEX または DIRECTMANIPULATION_MOTION_TRANSLATEY)に設定されている場合、DIRECTMANIPULATION_SNAPPOINT_COORDINATE のすべての値が有効です。 motion が DIRECTMANIPULATION_MOTION_ZOOM に設定されている場合、DIRECTMANIPULATION_SNAPPOINT_COORDINATE のうち DIRECTMANIPULATION_COORDINATE_ORIGIN のみが有効です(origin は 0.0f に設定する必要があります)。 |
| origin | FLOAT | in | 最初の、つまり起点となるスナップポイント。すべてのスナップポイントはこれを基準とします。DIRECTMANIPULATION_COORDINATE_ORIGIN が設定されている場合にのみ使用されます。 motion が DIRECTMANIPULATION_MOTION_ZOOM に設定されている場合、origin は 0.0f に設定する必要があります。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
原点はコンテンツ境界を基準とします。境界が設定されていない場合(SetContentRect が一度も呼び出されていない場合)、既定の境界は (-FLT_MAX, FLT_MAX) になります。
ズームの最小境界と最大境界を指定します。
| zoomMinimum | FLOAT | in | 許可される最小ズームレベル。0.1f 以上である必要があり、これは 100% ズームに相当します。 |
| zoomMaximum | FLOAT | in | 許可される最大ズーム。zoomMinimum より大きく、FLT_MAX より小さい必要があります。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
コンテンツが新しい境界の外側にあり、ビューポートが ENABLED または READY の場合、コンテンツは新しい境界内に収まるようにリセットされます。慣性の構成が有効な場合、リセット操作には慣性アニメーションが使用されます。
ビューポートを基準としたプライマリコンテンツの水平方向の配置を設定します。
| alignment | DIRECTMANIPULATION_HORIZONTALALIGNMENT | in | DIRECTMANIPULATION_HORIZONTALALIGNMENT の 1 つ以上の値。既定値は DIRECTMANIPULATION_HORIZONTALALIGNMENT_NONE です。 注 次のオプションは組み合わせることができません: DIRECTMANIPULATION_HORIZONTALALIGNMENT_LEFT、DIRECTMANIPULATION-HORIZONTALALIGNMENT_CENTER、DIRECTMANIPULATION_HORIZONTALALIGNMENT_RIGHT。DIRECTMANIPULATION_HORIZONTALALIGNMENT_UNLOCKCENTER は任意のオプションと組み合わせることができますが、単独では構成できません。
|
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
ズームまたはズーム慣性のみで構成される構成をアクティブにしている場合は、ズームの中心点を考慮するために DIRECTMANIPULATION_HORIZONTALALIGNMENT_UNLOCKCENTER を指定します。
例
次の例は、このメソッドの使用方法の一例を示しています。
HRESULT hr = pViewport->SetHorizontalAlignment(
DIRECTMANIPULATION_HORIZONTALALIGNMENT_CENTER | DIRECTMANIPULATION_HORIZONTALALIGNMENT_UNLOCKCENTER);
ビューポート内のプライマリコンテンツの垂直方向の配置を指定します。
| alignment | DIRECTMANIPULATION_VERTICALALIGNMENT | in | DIRECTMANIPULATION_VERTICALALIGNMENT の 1 つ以上の値。 注 DIRECTMANIPULATION_VERTICALALIGNMENT_TOP、DIRECTMANIPULATION_VERTICALALIGNMENT_CENTER、または DIRECTMANIPULATION_VERTICALALIGNMENT_BOTTOM は組み合わせることができません。DIRECTMANIPULATION_VERTICALALIGNMENT_UNLOCKCENTER は任意のオプションと組み合わせることができますが、単独では構成できません。
|
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
ズームまたはズーム慣性のみで構成される構成をアクティブにしている場合は、ズームの中心点を考慮するために DIRECTMANIPULATION_VERTICALALIGNMENT_UNLOCKCENTER を指定します。
例
次の例は、このメソッドの使用方法を示しています。
HRESULT hr = pContent->SetVerticalAlignment(
DIRECTMANIPULATION_VERTICALALIGNMENT_CENTER| DIRECTMANIPULATION_VERTICALALIGNMENT_UNLOCKCENTER);
プライマリコンテンツの、慣性を含む最終的な変換を取得します。
| matrix | FLOAT* | out | 慣性の終了位置を表す変換後の行列。 |
| pointCount | DWORD | in | 行列のサイズ。 すべての Direct Manipulation 変換には 3x2 行列が使用されるため、この値は常に 6 です。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
操作の中心点をコンテンツ座標で取得します。
| centerX | FLOAT* | out | 水平軸上の中心。 |
| centerY | FLOAT* | out | 垂直軸上の中心。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IDirectManipulationPrimaryContent "{C12851E4-1698-4625-B9B1-7CA3EC18630B}" #usecom global IDirectManipulationPrimaryContent IID_IDirectManipulationPrimaryContent "{}" #comfunc global IDirectManipulationPrimaryContent_SetSnapInterval 3 int,float,float #comfunc global IDirectManipulationPrimaryContent_SetSnapPoints 4 int,var,int #comfunc global IDirectManipulationPrimaryContent_SetSnapType 5 int,int #comfunc global IDirectManipulationPrimaryContent_SetSnapCoordinate 6 int,int,float #comfunc global IDirectManipulationPrimaryContent_SetZoomBoundaries 7 float,float #comfunc global IDirectManipulationPrimaryContent_SetHorizontalAlignment 8 int #comfunc global IDirectManipulationPrimaryContent_SetVerticalAlignment 9 int #comfunc global IDirectManipulationPrimaryContent_GetInertiaEndTransform 10 var,int #comfunc global IDirectManipulationPrimaryContent_GetCenterPoint 11 var,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IDirectManipulationPrimaryContent "{C12851E4-1698-4625-B9B1-7CA3EC18630B}" #usecom global IDirectManipulationPrimaryContent IID_IDirectManipulationPrimaryContent "{}" #comfunc global IDirectManipulationPrimaryContent_SetSnapInterval 3 int,float,float #comfunc global IDirectManipulationPrimaryContent_SetSnapPoints 4 int,sptr,int #comfunc global IDirectManipulationPrimaryContent_SetSnapType 5 int,int #comfunc global IDirectManipulationPrimaryContent_SetSnapCoordinate 6 int,int,float #comfunc global IDirectManipulationPrimaryContent_SetZoomBoundaries 7 float,float #comfunc global IDirectManipulationPrimaryContent_SetHorizontalAlignment 8 int #comfunc global IDirectManipulationPrimaryContent_SetVerticalAlignment 9 int #comfunc global IDirectManipulationPrimaryContent_GetInertiaEndTransform 10 sptr,int #comfunc global IDirectManipulationPrimaryContent_GetCenterPoint 11 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。