private void OnTouchUpHandler(object sender, WMTouchEventArgs e) { lock (m_touchlock) { this.touches.Remove(e.Id); } }
private void OnTouchDownHandler(object sender, WMTouchEventArgs e) { lock (m_touchlock) { TouchData t = new TouchData(); t.Id = e.Id; t.IsNew = true; t.Pos = new Vector2(e.LocationX, e.LocationY); this.touches.Add(e.Id, t); } }
private void OnTouchMoveHandler(object sender, WMTouchEventArgs e) { lock (m_touchlock) { TouchData t = this.touches[e.Id]; t.Pos = new Vector2(e.LocationX, e.LocationY); } }
private bool DecodeTouch(ref Message m) { // More than one touchinput may be associated with a touch message, int inputCount = (m.WParam.ToInt32() & 0xffff); // Number of touch inputs, actual per-contact messages TOUCHINPUT[] inputs = new TOUCHINPUT[inputCount]; if (!TouchConstants.GetTouchInputInfo(m.LParam, inputCount, inputs, Marshal.SizeOf(new TOUCHINPUT()))) { return false; } bool handled = false; for (int i = 0; i < inputCount; i++) { TOUCHINPUT ti = inputs[i]; EventHandler<WMTouchEventArgs> handler = null; if ((ti.dwFlags & TouchConstants.TOUCHEVENTF_DOWN) != 0) { handler = Touchdown; } else if ((ti.dwFlags & TouchConstants.TOUCHEVENTF_UP) != 0) { handler = Touchup; } else if ((ti.dwFlags & TouchConstants.TOUCHEVENTF_MOVE) != 0) { handler = TouchMove; } // Convert message parameters into touch event arguments and handle the event. if (handler != null) { WMTouchEventArgs te = new WMTouchEventArgs(); // TOUCHINFO point coordinates and contact size is in 1/100 of a pixel; convert it to pixels. // Also convert screen to client coordinates. 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); // Mark this event as handled. handled = true; } } TouchConstants.CloseTouchInputHandle(m.LParam); return handled; }