/// <summary> /// WM_TOUCHメッセージをデコードする /// </summary> /// <param name="m">ウィンドウメッセージ</param> private bool DecodeTouch(ref Message m) { // タッチ回数 int inputCount = LoWord(m.WParam.ToInt32()); TOUCHINPUT[] inputs; inputs = new TOUCHINPUT[inputCount]; // タッチ操作を取り出して構造体の配列に入れる if (!GetTouchInputInfo(m.LParam, inputCount, inputs, touchInputSize)) { // タッチ情報取得失敗 return(false); } // タッチ操作をハンドラにディスパッチする bool handled = false; for (int i = 0; i < inputCount; i++) { TOUCHINPUT ti = inputs[i]; // タッチイベントをハンドラにアサインする EventHandler <WMTouchEventArgs> handler = null; if ((ti.dwFlags & TOUCHEVENTF_DOWN) != 0) { handler = TouchDown; } else if ((ti.dwFlags & TOUCHEVENTF_UP) != 0) { handler = TouchUp; } else if ((ti.dwFlags & TOUCHEVENTF_MOVE) != 0) { handler = TouchMove; } // メッセージパラメータをタッチイベント引数に変換してイベントを処理する if (handler != null) { // raw touchinputメッセージをタッチイベントに変換する WMTouchEventArgs te = new WMTouchEventArgs(); // タッチイベントが発生した画面のXY位置を取得する te.ContactY = ti.cyContact / 100; te.ContactX = ti.cxContact / 100; te.Id = ti.dwID; Point pt = PointToClient(new Point(ti.x / 100, ti.y / 100)); te.LocationX = pt.X; te.LocationY = pt.Y; te.Time = ti.dwTime; te.Mask = ti.dwMask; te.Flags = ti.dwFlags; // イベントハンドラを呼び出す handler(this, te); // このイベントを処理済としてマークする handled = true; } } CloseTouchInputHandle(m.LParam); return(handled); }
private void btnTouchUp(object sender, WMTouchEventArgs e) { setBtnStatus(ButtonStatusCode.Normal); }
private void btnTouchMove(object sender, WMTouchEventArgs e) { }
private void btnTouchDown(object sender, WMTouchEventArgs e) { setBtnStatus(ButtonStatusCode.Clicked); }