没有在WndProc中获取Windows 8 WM_POINTER *事件

时间:2014-09-05 13:09:09

标签: c# winapi windows-8 touch gestures

我在Visual Studiio 2013中创建了一个DLL,它可以处理操作事件并输出精确的平移,旋转和缩放。之后我尝试将其与OpenGL-Project合并,以提供适当的手势支持。

选择 .NET 4.0 Client Profile 构建DLL,我在VS2013中使用一个简单的实现对其进行了测试。一切都运作完美,设置非常简单。

现在OpenGL项目正在 VS2010 中维护和开发,所以我启动了VS2010,引用了我的DLL 并在WndProc上执行了覆盖将WM_POINTER *事件放入我的DLL中。

问题是我没有得到这些事件!我曾经没有设法收到WM_POINTER *事件。

我有一些想法:

  • 开发机器是Win 7,测试机器是Win 8 - 也许在构建时需要一些WIN8功能?

  • 即使我只使用在VS2013中生成的DLL,我也无法在VS2010中使用Win8 API

  • Windows以某种方式确定我不想要WM_POINTER *事件,因为我运行的是未明确为Windows 8开发的应用程序(不知道我怎么能改变它)

我已经测试了各种版本的.NET Framework,因此它不是.NET问题。 我进一步验证了没有为这个特定的应用程序触发WM_POINTER *事件(在任何其他它工作得很好)并且我的WndProc覆盖正常工作。

我非常绝望,并且不知道还有什么可以尝试。

如果有任何拥有WIN8 Pointer经验的人能帮助我,那真的很高兴。

干杯!

编辑:忘记提及OpenGL-Project基本上是一个WinForms应用程序。

2 个答案:

答案 0 :(得分:1)

WM_POINTER消息是在Windows 8中引入的,这就是它在您的开发机器中不起作用的原因。您将需要使用旧的,已弃用的WM_TOUCH和WM_GESTURE消息:http://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/b8cb28dd-b2ba-4392-b3a8-6bf18518087f/windows-8-wmpointer-vs-wmtouch?forum=tabletandtouch

答案 1 :(得分:0)

对于任何绊脚石的人:

Reddit-User darinitis写了这个

  

你是否在VS2013中有一个OpenGL窗口,或者只是测试   在winforms项目中捕获手势?

     

OpenGL可能会在您面前或作为您的孩子创建一个窗口   winforms窗口。因为指针永远不会超过你的指针   窗口(它在GL上),你没有得到指针消息。

     

您是否使用Spy ++查看实际的窗口层次结构并查看是否   正在为窗口上方的OpenGL创建另一个窗口?

当场正确。我曾经的OpenGL孩子没有转发事件但试图处理它们。这种方式在我的WinForms应用程序中没有任何结果。