_IManipulationEvents
COM公式ドキュメント
操作(マニピュレーション)および慣性のイベントを処理します。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
操作(マニピュレーション)または慣性が開始したときのイベントを処理します。
| x | FLOAT | in | ユーザー定義座標における原点の x 座標。 |
| y | FLOAT | in | ユーザー定義座標における原点の y 座標。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
操作イベントは、IInertiaProcessor インターフェイスと IManipulationProcessor インターフェイスの両方に対して生成されます。 TOUCHINPUT 構造体の値を ProcessDown の呼び出しで使用している場合、座標の単位は 100 分の 1 ピクセルになります。
例
次のコードは、ManipulationStarted メソッドの実装例を示しています。
HRESULT STDMETHODCALLTYPE CManipulationEventSink::ManipulationStarted(
/* [in] */ FLOAT x,
/* [in] */ FLOAT y)
{
m_cStartedEventCount ++;
// place your code handler here to do any operations based on the manipulation
return S_OK;
}
操作対象のオブジェクトが変化したときに発生するイベントを処理します。
| x | FLOAT | in | ユーザー定義座標における原点の x 座標。 |
| y | FLOAT | in | ユーザー定義座標における原点の y 座標。 |
| translationDeltaX | FLOAT | in | 前回のイベント以降の、x 軸方向への平行移動の変化量(ユーザー定義座標)。 |
| translationDeltaY | FLOAT | in | 前回のイベント以降の、y 軸方向への平行移動の変化量(ユーザー定義座標)。 |
| scaleDelta | FLOAT | in | 前回のイベント以降のスケールの変化量。前回のスケールに対する割合(パーセント)で表されます。 |
| expansionDelta | FLOAT | in | 前回のイベント以降の拡張の変化量(ユーザー定義座標)。 |
| rotationDelta | FLOAT | in | 前回のイベント以降の回転の変化量(ラジアン)。 |
| cumulativeTranslationX | FLOAT | in | 操作の開始以降の、x 軸方向への平行移動量(ユーザー定義座標)。 |
| cumulativeTranslationY | FLOAT | in | 操作の開始以降の、y 軸方向への平行移動量(ユーザー定義座標)。 |
| cumulativeScale | FLOAT | in | 操作の開始以降のスケールの変化量。元のサイズに対する割合(パーセント)で表されます。 |
| cumulativeExpansion | FLOAT | in | 操作の開始以降の拡張の変化量(ユーザー定義座標)。 |
| cumulativeRotation | FLOAT | in | 操作の開始以降の回転の変化量(ラジアン)。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
操作イベントは、IInertiaProcessor インターフェイスと IManipulationProcessor インターフェイスの両方に対して生成されます。 TOUCHINPUT 構造体の値を ProcessMove の呼び出しで使用している場合、座標の単位は 100 分の 1 ピクセルになります。
例
次のコードは、ManipulationDelta メソッドの実装例を示しています。
HRESULT STDMETHODCALLTYPE CManipulationEventSink::ManipulationDelta(
/* [in] */ FLOAT x,
/* [in] */ FLOAT y,
/* [in] */ FLOAT translationDeltaX,
/* [in] */ FLOAT translationDeltaY,
/* [in] */ FLOAT scaleDelta,
/* [in] */ FLOAT expansionDelta,
/* [in] */ FLOAT rotationDelta,
/* [in] */ FLOAT cumulativeTranslationX,
/* [in] */ FLOAT cumulativeTranslationY,
/* [in] */ FLOAT cumulativeScale,
/* [in] */ FLOAT cumulativeExpansion,
/* [in] */ FLOAT cumulativeRotation)
{
m_cDeltaEventCount ++;
// Place your code handler here to do any operations based on the manipulation.
return S_OK;
}
操作(マニピュレーション)または慣性が終了したときのイベントを処理します。
| x | FLOAT | in | ユーザー定義座標における原点の x 座標。 |
| y | FLOAT | in | ユーザー定義座標における原点の y 座標。 |
| cumulativeTranslationX | FLOAT | in | 操作の開始以降の、x 軸方向への合計平行移動量(ユーザー定義座標)。 |
| cumulativeTranslationY | FLOAT | in | 操作の開始以降の、y 軸方向への合計平行移動量(ユーザー定義座標)。 |
| cumulativeScale | FLOAT | in | 操作の開始以降のスケールの合計変化量。元のサイズに対する割合(パーセント)で表されます。 |
| cumulativeExpansion | FLOAT | in | 操作の開始以降の拡張の合計変化量(ユーザー定義座標)。 |
| cumulativeRotation | FLOAT | in | 操作の開始以降の回転の合計変化量(ラジアン)。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
操作イベントは、IInertiaProcessor インターフェイスと IManipulationProcessor インターフェイスの両方に対して生成されます。 TOUCHINPUT 構造体の値を ProcessUp の呼び出しで使用している場合、座標の単位は 100 分の 1 ピクセルになります。
例
次のコードは、ManipulationCompleted メソッドの実装例を示しています。
HRESULT STDMETHODCALLTYPE CManipulationEventSink::ManipulationCompleted(
/* [in] */ FLOAT x,
/* [in] */ FLOAT y,
/* [in] */ FLOAT cumulativeTranslationX,
/* [in] */ FLOAT cumulativeTranslationY,
/* [in] */ FLOAT cumulativeScale,
/* [in] */ FLOAT cumulativeExpansion,
/* [in] */ FLOAT cumulativeRotation)
{
m_cCompletedEventCount ++;
m_fX = x;
m_fY = y;
m_fCumulativeTranslationX = cumulativeTranslationX;
m_fCumulativeTranslationY = cumulativeTranslationY;
m_fCumulativeScale = cumulativeScale;
m_fCumulativeExpansion = cumulativeExpansion;
m_fCumulativeRotation = cumulativeRotation;
// Place your code handler here to do any operations based on the manipulation.
return S_OK;
}
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID__IManipulationEvents "{4F62C8DA-9C53-4B22-93DF-927A862BBB03}"
#usecom global _IManipulationEvents IID__IManipulationEvents "{}"
#comfunc global _IManipulationEvents_ManipulationStarted 3 float,float
#comfunc global _IManipulationEvents_ManipulationDelta 4 float,float,float,float,float,float,float,float,float,float,float,float
#comfunc global _IManipulationEvents_ManipulationCompleted 5 float,float,float,float,float,float,float
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。