Win32 API 日本語リファレンス
ホームGraphics.DirectManipulation › IDirectManipulationPrimaryContent

IDirectManipulationPrimaryContent

COM
IIDc12851e4-1698-4625-b9b1-7ca3ec18630b継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

ビューポート内のプライマリコンテンツをカプセル化します。

メソッド 9

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

vtbl 3 HRESULT SetSnapInterval(DIRECTMANIPULATION_MOTION_TYPES motion, FLOAT interval, FLOAT offset)

慣性の終了位置に対するスナップポイントを一定の間隔で指定します。

motionDIRECTMANIPULATION_MOTION_TYPESinDIRECTMANIPULATION_MOTION_TYPES 列挙値のいずれか。
intervalFLOATin各スナップポイント間の間隔。
offsetFLOATinSetSnapCoordinate で指定された座標からのオフセット。

戻り値

メソッドが成功した場合は 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);
vtbl 4 HRESULT SetSnapPoints(DIRECTMANIPULATION_MOTION_TYPES motion, FLOAT* points, DWORD pointCount)

慣性の静止位置に対するスナップポイントを指定します。

motionDIRECTMANIPULATION_MOTION_TYPESinDIRECTMANIPULATION_MOTION_TYPES 列挙値の 1 つ以上。DIRECTMANIPULATION_MOTION_TRANSLATE_XDIRECTMANIPULATION_MOTION_TRANSLATE_Y、または DIRECTMANIPULATION_MOTION_ZOOM のみが許可されます。
pointsFLOAT*inoptionalスナップ先となる、コンテンツ境界内のスナップポイントの配列。SetSnapCoordinate で設定した原点を基準として昇順で指定する必要があります。
pointCountDWORDinスナップポイントの配列のサイズ。0 より大きい必要があります。

戻り値

メソッドが成功した場合は S_OK を返します。スナップポイントに変更がない場合、このメソッドは S_FALSE を返すことがあります。それ以外の場合は HRESULT エラーコードを返します。無効なスナップポイントが指定された場合、既存のスナップポイントに影響が及ぶことがあります。

解説(Remarks)

スナップポイントが無効な場合(たとえばコンテンツ境界の外側にある場合)は無視され、コンテンツは常にコンテンツ境界内に収まります。

vtbl 5 HRESULT SetSnapType(DIRECTMANIPULATION_MOTION_TYPES motion, DIRECTMANIPULATION_SNAPPOINT_TYPE type)

スナップポイントの種類を指定します。

motionDIRECTMANIPULATION_MOTION_TYPESinDIRECTMANIPULATION_MOTION_TYPES 列挙値の 1 つ以上。
typeDIRECTMANIPULATION_SNAPPOINT_TYPEin

DIRECTMANIPULATION_SNAPPOINT_TYPE 列挙値のいずれか。

DIRECTMANIPULATION_SNAPPOINT_TYPE_NONE に設定すると、SetSnapPoints または SetSnapInterval で指定したスナップポイントがクリアされます。

戻り値

メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 6 HRESULT SetSnapCoordinate(DIRECTMANIPULATION_MOTION_TYPES motion, DIRECTMANIPULATION_SNAPPOINT_COORDINATE coordinate, FLOAT origin)

スナップポイントまたはスナップ間隔の座標系を指定します。

motionDIRECTMANIPULATION_MOTION_TYPESinDIRECTMANIPULATION_MOTION_TYPES の値のいずれか。
coordinateDIRECTMANIPULATION_SNAPPOINT_COORDINATEin

DIRECTMANIPULATION_SNAPPOINT_COORDINATE の値のいずれか。

motion が平行移動(DIRECTMANIPULATION_MOTION_TRANSLATEX または DIRECTMANIPULATION_MOTION_TRANSLATEY)に設定されている場合、DIRECTMANIPULATION_SNAPPOINT_COORDINATE のすべての値が有効です。

motionDIRECTMANIPULATION_MOTION_ZOOM に設定されている場合、DIRECTMANIPULATION_SNAPPOINT_COORDINATE のうち DIRECTMANIPULATION_COORDINATE_ORIGIN のみが有効です(origin は 0.0f に設定する必要があります)。

originFLOATin

最初の、つまり起点となるスナップポイント。すべてのスナップポイントはこれを基準とします。DIRECTMANIPULATION_COORDINATE_ORIGIN が設定されている場合にのみ使用されます。

motionDIRECTMANIPULATION_MOTION_ZOOM に設定されている場合、origin は 0.0f に設定する必要があります。

戻り値

メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

原点はコンテンツ境界を基準とします。境界が設定されていない場合(SetContentRect が一度も呼び出されていない場合)、既定の境界は (-FLT_MAX, FLT_MAX) になります。

vtbl 7 HRESULT SetZoomBoundaries(FLOAT zoomMinimum, FLOAT zoomMaximum)

ズームの最小境界と最大境界を指定します。

zoomMinimumFLOATin許可される最小ズームレベル。0.1f 以上である必要があり、これは 100% ズームに相当します。
zoomMaximumFLOATin許可される最大ズーム。zoomMinimum より大きく、FLT_MAX より小さい必要があります。

戻り値

メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

コンテンツが新しい境界の外側にあり、ビューポートが ENABLED または READY の場合、コンテンツは新しい境界内に収まるようにリセットされます。慣性の構成が有効な場合、リセット操作には慣性アニメーションが使用されます。

vtbl 8 HRESULT SetHorizontalAlignment(DIRECTMANIPULATION_HORIZONTALALIGNMENT alignment)

ビューポートを基準としたプライマリコンテンツの水平方向の配置を設定します。

alignmentDIRECTMANIPULATION_HORIZONTALALIGNMENTin

DIRECTMANIPULATION_HORIZONTALALIGNMENT の 1 つ以上の値。既定値は DIRECTMANIPULATION_HORIZONTALALIGNMENT_NONE です。

次のオプションは組み合わせることができません: DIRECTMANIPULATION_HORIZONTALALIGNMENT_LEFT、DIRECTMANIPULATION-HORIZONTALALIGNMENT_CENTER、DIRECTMANIPULATION_HORIZONTALALIGNMENT_RIGHTDIRECTMANIPULATION_HORIZONTALALIGNMENT_UNLOCKCENTER は任意のオプションと組み合わせることができますが、単独では構成できません。

戻り値

メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

ズームまたはズーム慣性のみで構成される構成をアクティブにしている場合は、ズームの中心点を考慮するために DIRECTMANIPULATION_HORIZONTALALIGNMENT_UNLOCKCENTER を指定します。

次の例は、このメソッドの使用方法の一例を示しています。

HRESULT hr = pViewport->SetHorizontalAlignment(
    DIRECTMANIPULATION_HORIZONTALALIGNMENT_CENTER | DIRECTMANIPULATION_HORIZONTALALIGNMENT_UNLOCKCENTER);
vtbl 9 HRESULT SetVerticalAlignment(DIRECTMANIPULATION_VERTICALALIGNMENT alignment)

ビューポート内のプライマリコンテンツの垂直方向の配置を指定します。

alignmentDIRECTMANIPULATION_VERTICALALIGNMENTin

DIRECTMANIPULATION_VERTICALALIGNMENT の 1 つ以上の値。

DIRECTMANIPULATION_VERTICALALIGNMENT_TOPDIRECTMANIPULATION_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);
vtbl 10 HRESULT GetInertiaEndTransform(FLOAT* matrix, DWORD pointCount)

プライマリコンテンツの、慣性を含む最終的な変換を取得します。

matrixFLOAT*out慣性の終了位置を表す変換後の行列。
pointCountDWORDin

行列のサイズ。

すべての Direct Manipulation 変換には 3x2 行列が使用されるため、この値は常に 6 です。

戻り値

メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

警告 慣性が終了または中断されている場合、このメソッドを呼び出すと競合状態が発生する可能性があります。これは OnViewportStatusChanged コールバックの実行中にも発生する可能性があります。
vtbl 11 HRESULT GetCenterPoint(FLOAT* centerX, FLOAT* centerY)

操作の中心点をコンテンツ座標で取得します。

centerXFLOAT*out水平軸上の中心。
centerYFLOAT*out垂直軸上の中心。

戻り値

メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_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 方式にも切替可。