UWP 相当于 Win32 的 GetPointerFrameInfo()

UWP equivalent to Win32's GetPointerFrameInfo()

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

我以前在 Win32 应用程序中使用 GetPointerFrameInfo() 方法完成过此操作。它可以检索整帧指针输入的信息。不过这个方法在UWP中好像没有。 指针输入整帧取回的解决方法是什么?

例如,当我用三指按住屏幕,拖动一小段距离,然后松开时,我在注册指针hanbdler中收到了如下事件序列(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的PointerPointclass提供了一个叫做FrameID的属性,用于识别输入框,但是我找不到任何方法可以使用此帧 ID 用于检索指针输入的整个帧。

Because the above events all happen in a sequential timing pattern, it is so hard to do the multi-touch processing since the total pointer number can not be known in advance.

是的,您完全正确,但不幸的是,在 UWP 中没有与 Win32 的 GetPointerFrameInfo() 方法等效的方法,我们只能关注基本的 Pointer 事件。作为你在registered pointer handler中事件序列的测试结果,解决这个问题的一种常见方法是在Moved事件之前统计Pressed事件,并在Released事件中清除这个计数,每个按下事件代表一个手指指针,你可以参考我这里的类似案例:

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

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