【问题标题】:UWP equivalent to Win32's GetPointerFrameInfo()UWP 相当于 Win32 的 GetPointerFrameInfo()
【发布时间】:2016-09-19 11:14:44
【问题描述】:

我想在我的 Windows UWP 应用程序中收集多点触控指针原始数据,以便进行手势识别。

我之前在 Win32 应用程序中使用GetPointerFrameInfo() 方法完成了此操作。它可以检索整个指针输入帧的信息。但是,这种方法在 UWP 中似乎不可用。 获取指针输入全帧的解决方案是什么?

例如,当我用三个手指按住屏幕,拖动一小段距离,然后松开,我在注册的指针句柄中收到以下事件序列(onPointerPressed()/onPointerMoved()/onPointerReleased(),我的处理函数)

pointer1 pressed event,
pointer2 pressed event,
pointer3 pressed event,

pointer1 moved event,
pointer2 moved event,
pointer3 moved event,

pointer1 moved event,
pointer2 moved event,
pointer3 moved event,

...

pointer1 released event,
pointer2 released event,
pointer3 released event,

由于上述事件都是按时序发生的,所以多点触控的处理非常困难,因为无法预先知道总的指针数。

我确实注意到 UWP 的 PointerPoint 类提供了一个名为 FrameID 的属性,用于标识输入帧,但我找不到任何方法可以使用此帧 id 来检索指针输入的整个帧。

【问题讨论】:

  • 我已经更正了您问题中的一些语法,并将代码块用于方法和属性名称。我还删除了不相关的标签。

标签: win-universal-app uwp multi-touch


【解决方案1】:

由于上述事件都是按时序发生的,所以多点触控的处理非常困难,因为无法预先知道总的指针数。

是的,你完全正确,但不幸的是 UWP 中没有相当于 Win32 的 GetPointerFrameInfo() 方法,我们只能关注基本的指针事件。作为您在注册指针处理程序中事件序列的测试结果,解决此问题的常用方法是在Moved事件之前计数Pressed事件,并在Released事件中清除此计数,每个按下的事件代表一个手指指针,你可以参考我这里的类似案例:How can I get touch input in uwp?

但是,如果你的愿望不会在商店中发布,有一些方法可以在 UWP 应用程序中使用 Win32 的 API。一种方法是使用VS2015TemplateBrokeredComponents 在 UWP 应用和传统桌面应用之间架起一座桥梁,您可以按照此处的步骤尝试您的解决方案。或者,您可以尝试在您的 UWP 应用中使用 PInvoke 和这个 Win32 API。

除了我在这里提供的所有想法之外,我希望您可以通过 Windows 反馈工具提交请求以添加这些新功能以进行开发。我个人认为这是对 UWP 应用的一个很好的功能要求。

【讨论】:

  • 感谢您的建议,我会自己分析触摸事件,因为我们需要有我们的应用程序。在应用商店发布。
猜你喜欢
  • 2010-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-29
  • 2011-06-13
  • 1970-01-01
  • 2011-06-13
  • 2022-01-07
相关资源
最近更新 更多