void DX11RendererNode_Load(object sender, EventArgs e) { if (!TouchConstants.RegisterTouchWindow(this.Handle, 0)) { this.touchsupport = false; } else { this.touchsupport = true; } }
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); }