Hongkun Wang
Hongkun Wang

Reputation: 877

UWP equivalent to Win32's GetPointerFrameInfo()

I would like to collect multi-touch pointer raw data in my Windows UWP application, so I can do gesture recognition.

I have done this in a Win32 application previously by using the GetPointerFrameInfo() method. It can retrieve the information of whole frame of pointer input. However, this method does not seem to be available in UWP. What is the solution to retrieve the whole frame of pointer input?

For example, when I use three fingers to press screen, drag for a short distance, then release, I received the following event sequence in registered pointer hanbdler (onPointerPressed() / onPointerMoved() / onPointerReleased(), my handler functions)

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,

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.

I did notice that UWP's PointerPoint class provides a property called FrameID, used to identify the input frame, but I can not find any method to use this frame id to retrieve the whole frame of pointer input.

Upvotes: 1

Views: 200

Answers (1)

Grace Feng
Grace Feng

Reputation: 16652

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.

Yes you're absolutely right, but unfortunately there is no equivalent to Win32's GetPointerFrameInfo() method in UWP, we can only focus on the base Pointer events. As your test result of event sequence in registered pointer handler, a common way to solve this problem is to count the Pressed events before Moved events, and clear this count in the Released events, each pressed events represents a finger pointer, you can refer to my similar case here: How can I get touch input in uwp?

But, if your want won't be published on the store, there are methods to use Win32's API in UWP app. One way is using VS2015TemplateBrokeredComponents to build a bridge between UWP app and traditional desktop app, you can follow the steps here to try your solution out. Alternatively you can try to use PInvoke and this Win32 API in your UWP app.

Above all the ideas I provided here, I hope you may submit a request to add this new features for development through the Windows Feedback tool. I personally think this is a good feature request for UWP apps.

Upvotes: 1

Related Questions