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

cor*_*ulu 16 c# touchscreen cursor touch windows-7

我的问题

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

Cursor.Clip = new Rectangle(x1, y1, x2, y2);
Run Code Online (Sandbox Code Playgroud)

但我的问题有点复杂.

我需要它做的是正确地将自己映射到特定的窗口边界,以便触摸输入将被限制到该窗口,但是将正确地剪切到窗口,以便当我触摸左上角或右下角时触摸屏的一角,它将光标放在窗口的左上角或右下角.使用Cursor.Clip不会那样做,我在触摸屏上触摸的那个剪切区域之外的东西只会映射到它触摸的窗口的最近边缘.

有什么东西可以让我预先过滤鼠标位置,这样我就能正确调整它的界限吗?

如果所有失败

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

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

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

要清楚

  • 我不介意正常的鼠标被这些中断.
  • 我说的是使用默认Windows 7 Touch的Windows 7系统
  • 输入通过USB进入,而不是串行或类似的东西.

Mad*_*kor 1

您可以使用反应式扩展来剪辑触摸事件

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();
}
Run Code Online (Sandbox Code Playgroud)

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