Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从触摸屏重定向/重新映射/预过滤光标输入 我的问题_C#_Windows 7_Cursor_Touch_Touchscreen - Fatal编程技术网

C# 从触摸屏重定向/重新映射/预过滤光标输入 我的问题

C# 从触摸屏重定向/重新映射/预过滤光标输入 我的问题,c#,windows-7,cursor,touch,touchscreen,C#,Windows 7,Cursor,Touch,Touchscreen,好的,基本的答案是: Cursor.Clip = new Rectangle(x1, y1, x2, y2); 但我的问题有点复杂 我需要它正确地将自己映射到一个特定的窗口边界,这样触摸输入将被限制到该窗口,但将正确地将自己剪辑到窗口,这样当我触摸触摸触摸屏的左上角或右下角时,它会将光标放置在窗口的左上角或右下角。使用光标。Clip不会这样做,我在触摸屏上触摸到的、在该剪切区域之外的所有内容都将映射到我触摸的窗口的最近边缘 是否有任何东西可以让我预先过滤鼠标的位置,以便我可以正确地调整它的边界

好的,基本的答案是:

Cursor.Clip = new Rectangle(x1, y1, x2, y2);
但我的问题有点复杂

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

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

如果一切都失败了 或者,我可以尝试找到一些代码,将鼠标feed转换为TUIO输入,并以这种方式将其输入到应用程序中,但我希望我不必这样做。所以,如果有人知道我是如何做到这一点的,如果我最初的请求不可能实现的话,这将对我有所帮助

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

说清楚
  • 我不介意一只正常的老鼠被这些干扰
  • 我说的是使用默认Windows7触摸屏的Windows7系统
  • 输入是通过USB输入的,不是串行或类似的

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

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();
}
var movingEvents=
可观察的。从事件模式(
h=>this.MouseMove+=h,h=>this.MouseMove-=h)
.Select(x=>x.EventArgs.Location)
.其中(位置=>
location.X>=viewPort.location.X
&&location.X=viewPort.location.Y

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


例如,请参见

您是否可以在渲染项目后面放置一个透明框,并使透明框最大化?如果您已经在屏幕上找到了工作区域的位置,那么问题只是单应性重投影,您是否有工作区域的边界?如果是,我将在答案中公布我的代码和用法…I d但我不认为这是预过滤。它可能在屏幕上工作,但如果鼠标在任何一点以编程方式在另一点注册,绘图应用程序将绘制它。这似乎仍然取决于鼠标移动生效后发生的MouseMove事件。