Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
 private void btnTouchUp(object sender, WMTouchEventArgs e)
 {
     setBtnStatus(ButtonStatusCode.Normal);
 }
Exemplo n.º 3
0
 private void btnTouchMove(object sender, WMTouchEventArgs e)
 {
 }
Exemplo n.º 4
0
 private void btnTouchDown(object sender, WMTouchEventArgs e)
 {
     setBtnStatus(ButtonStatusCode.Clicked);
 }