WPF:是否有可能将普通鼠标事件“路由”到Windows 7中的触摸事件

我目前正在使用C#(.NET 4.0)和WPF for Windows 7开发触摸屏应用程序。我的问题是我现在可用的触摸屏驱动程序只生成鼠标事件。 (不幸的是,制造商没有提供正版Windows 7驱动程序)所以,目前我无法正确地进行测试。

是否有通用的方法告诉Windows 7某个设备应该是一个触摸设备(当然 – 这只能提供单点触摸事件)?

检查一下。 http://blakenui.codeplex.com/ 。 有一个MouseTouchDevice.cs文件,如下所示。 它将正常的鼠标事件转换为操纵事件。

///  /// Used to translate mouse events into touch events, enabling a unified /// input processing pipeline. ///  /// This class originally comes from Blake.NUI - http://blakenui.codeplex.com 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 } 

}

我希望这就是你要找的东西。

您需要重写鼠标驱动程序才能像触摸设备一样执行此操作。 一个更简单的解决方法是获得像Wacom Bamboo Touch这样的设备? 这是一个真正的触摸设备(而不是触摸屏)。