从触摸屏重定向/重新映射/预过滤光标输入

时间:2013-03-23 00:02:57

标签: c# windows-7 cursor touch touchscreen

我的问题

好的,基本答案就是使用:

Cursor.Clip = new Rectangle(x1, y1, x2, y2);

但我的问题有点复杂。

我需要它做的是正确地将自己映射到特定的窗口边界,以便触摸输入将被限制到该窗口,但是将自己正确地剪切到窗口,以便当我触摸左上角时在触摸屏的角落或右下角,它会将光标放在窗口的左上角或右下角。使用Cursor.Clip将不会这样做,我触摸的所有内容都是在该剪切区域之外的触摸屏将被映射到窗口的最近边缘,而不是我触摸的位置。

是否有任何东西可以让我预先过滤鼠标位置,以便我可以正确调整它的界限?

如果所有失败

或者,我可以尝试找到一些代码,将鼠标输入转换为 TUIO 输入并以此方式将其提供给应用程序,但我希望我不必这样做。因此,如果有人知道如何做到这一点,那么如果我的原始请求无法实现则会有所帮助。

对于那些想知道我在做什么的人

如果您需要确切知道我为什么这样做,我基本上是尝试将视频输入的触摸屏中的鼠标事件输入到可以接收触摸输入的3D应用程序中(通过正常的鼠标事件或TUIO)将绘制到该视频,但无法最大化到屏幕的全分辨率,因为它只会渲染设置为输出的大小。

要清除

  • 我不介意普通鼠标被其中任何一个打乱。
  • 我说的是使用默认Windows 7 Touch的Windows 7系统
  • 输入是通过USB进入的,而不是串行或类似的东西。

2 个答案:

答案 0 :(得分:1)

您可以使用Reactive Extensions剪辑触摸事件

var movingEvents = 
      Observable.FromEventPattern<MouseEventHandler, MouseEventArgs>(
        h => this.MouseMove += h, h => this.MouseMove -= h)
          .Select(x => x.EventArgs.Location)
          .Where(location =>
               location.X >= viewPort.Location.X 
                  && location.X <= viewPort.Location.X + viewPort.Width
                  && location.Y >= viewPort.Location.Y 
                  && location.Y <= viewPort.Location.Y + viewPort.Height);

movingEvents.Subscribe(update);

public void update(Point p)
{
    textBox1.Text = p.ToString();
}

http://www.codeproject.com/Articles/52308/The-Rx-Framework-By-Example

答案 1 :(得分:0)

安装低级鼠标挂钩可能会有效,因为Windows 8之前的触摸屏通常会尽力伪装成鼠标。

参见例如http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C