WPF: Is there a possibility to “route” ordinary mouse events to touch events in Windows 7

后端 未结 2 1258
栀梦
栀梦 2020-12-15 06:09

I\'m currently developing a touch screen application using C# (.NET 4.0) and WPF for Windows 7. My problem is that the driver of the touch screen I have available at the mom

相关标签:
2条回答
  • 2020-12-15 06:59

    Check this. http://blakenui.codeplex.com/. There is a MouseTouchDevice.cs file that looks like this. It converts normal mouse events to Manipulation events.

    /// <summary>
    /// Used to translate mouse events into touch events, enabling a unified 
    /// input processing pipeline.
    /// </summary>
    /// <remarks>This class originally comes from Blake.NUI - http://blakenui.codeplex.com</remarks>
    public class MouseTouchDevice : TouchDevice, ITouchDevice
    {
        #region Class Members
    
        private static MouseTouchDevice device;
    
        public Point Position { get; set; }
    
        #endregion
    
        #region Public Static Methods
    
        public static void RegisterEvents(FrameworkElement root)
        {
            root.PreviewMouseDown += MouseDown;
            root.PreviewMouseMove += MouseMove;
            root.PreviewMouseUp += MouseUp;
            root.LostMouseCapture += LostMouseCapture;
            root.MouseLeave += MouseLeave;
        }
    
        #endregion
    
        #region Private Static Methods
    
        private static void MouseDown(object sender, MouseButtonEventArgs e)
        {
            if (device != null &&
                device.IsActive)
            {
                device.ReportUp();
                device.Deactivate();
                device = null;
            }
            device = new MouseTouchDevice(e.MouseDevice.GetHashCode());
            device.SetActiveSource(e.MouseDevice.ActiveSource);
            device.Position = e.GetPosition(null);
            device.Activate();
            device.ReportDown();
        }
    
        private static void MouseMove(object sender, MouseEventArgs e)
        {
            if (device != null &&
                device.IsActive)
            {
                device.Position = e.GetPosition(null);
                device.ReportMove();
            }
        }
    
        private static void MouseUp(object sender, MouseButtonEventArgs e)
        {
            LostMouseCapture(sender, e);
        }
    
        static void LostMouseCapture(object sender, MouseEventArgs e)
        {
            if (device != null &&
                device.IsActive)
            {
                device.Position = e.GetPosition(null);
                device.ReportUp();
                device.Deactivate();
                device = null;
            }
        }
    
        static void MouseLeave(object sender, MouseEventArgs e)
        {
            LostMouseCapture(sender, e);
        }
    
        #endregion
    
        #region Constructors
    
        public MouseTouchDevice(int deviceId) :
            base(deviceId)
        {
            Position = new Point();
        }
    
        #endregion
    
        #region Overridden methods
    
        public override TouchPointCollection GetIntermediateTouchPoints(IInputElement relativeTo)
        {
            return new TouchPointCollection();
        }
    
        public override TouchPoint GetTouchPoint(IInputElement relativeTo)
        {
            Point point = Position;
            if (relativeTo != null)
            {
                point = this.ActiveSource.RootVisual.TransformToDescendant((Visual)relativeTo).Transform(Position);
            }
    
            Rect rect = new Rect(point, new Size(1, 1));
    
            return new TouchPoint(this, point, rect, TouchAction.Move);
        }
    
        #endregion
    }
    

    }

    I am hoping this is what you are looking for.

    0 讨论(0)
  • 2020-12-15 07:00

    You would need to rewrite the mouse driver to act like a touch device to do this. A simpler workaround would be to get a device like the Wacom Bamboo Touch? It's a real touch device (not a touch screen).

    0 讨论(0)
提交回复
热议问题