Search code examples
c#winapiwindows-8touchgestures

Not getting Windows 8 WM_POINTER* events in WndProc


I created a DLL in Visual Studiio 2013 which works with the manipulation-event and outputs refined translation, rotation and scaling. Afterwards I tried to merge this with a OpenGL-Project, to provide proper gesture support.

The DLL is build with .NET 4.0 Client Profile selected, and I tested it with a simple implementation in VS2013. Everything worked flawless and the setup was pretty easy.

Now the OpenGL Project is being maintained and developed in VS2010, so I fired up VS2010, referenced my DLL and did an override on the WndProc to get the WM_POINTER* events into my DLL.

The problem is that I do not get the events ! I not once managed to receive a WM_POINTER* event.

I have some ideas:

  • Development machine is Win 7, test machine is Win 8 - maybe some WIN8 Features are required at build time ?

  • I simply can't work with Win8 API in VS2010, even if I only use a DLL generated in VS2013

  • Windows somehow determines that I do not want WM_POINTER* events as I run a Application not explicitly developed for Windows 8 (Not sure how I could change that)

I've already tested various versions of the .NET Framework, so it's not a .NET issue. I furthermore verified that no WM_POINTER* events are fired for this particular application (in any other it works just fine) and that my WndProc override is working properly.

I am pretty desperate and have no real clue what else to try.

Would be really glad if anyone with WIN8 Pointer experience could help me out.

Cheers !

Edit: Forgot to mention that the OpenGL-Project is basically a WinForms Application.


Solution

  • For anyone stumbling about this:

    Reddit-User darinitis wrote this

    Did you have an OpenGL window in VS2013, or was the test just to capture gestures in a winforms project?

    OpenGL may be creating a window in front of, or as a child of your winforms window. Because the pointer is never actually over your window (it is on the GL one), you don't get the pointer messages.

    Have you used Spy++ to see the actual window hierarchy and see if another window is being created for OpenGL above your window?

    And was right on spot. The OpenGL child I had did not forward the events but tried to handle them. This way nothing ever arrived in my WinForms application.