16

我的问题

好的,对此的基本答案是使用:

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

但我的问题有点复杂。

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

有什么可以让我预先过滤鼠标位置以便我可以正确调整它的边界吗?

如果一切都失败了

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

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

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

明确

  • 我不介意一只普通的老鼠被这些东西打乱。
  • 我说的是使用默认 Windows 7 Touch 的 Windows 7 系统
  • 输入是通过 USB 输入的,而不是串行的或类似的东西。
4

2 回答 2

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

于 2013-04-17T10:14:41.457 回答
0

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

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

于 2013-09-02T20:54:22.277 回答