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

标签 c# windows-7 touch touchscreen mouse-cursor

我的问题

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

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

但我的问题有点复杂。

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

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

如果其他都失败了

或者,我可以尝试找到一些代码,将鼠标输入转换为 TUIO 输入,并以此方式将其输入到应用程序中,但我希望我不必那样做。因此,如果有人知道我该怎么做,那将有助于解决我最初的请求无法实现的情况。

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

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

明确

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

最佳答案

你可以使用 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

关于c# - 从触摸屏重定向/重新映射/预过滤光标输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15581721/

相关文章:

c# - 对象引用未设置为运行时出现的对象异常实例

c# - 如何在 Dropdownlist selectedIndexChanged 中获取行索引?

sql-server - SQL Server 2008 安装

Git错误: Cannot Spawn ~\. ssh

android - 如何将 getevent 触摸坐标解释为实际触摸坐标

android - onSingleTapConfirmed 和 onSingleTapUp 的区别

c# - 一个变量,多个值?

c# - 从 TaskCompletionSource 返回 Task 而不是 Task<TResult>

c++ - 在 64 位操作系统上运行的 32 位应用程序

javascript - 如何识别鼠标悬停事件对象是否来自触摸屏触摸?