在WndProc中未获取Windows 8 WM_POINTER*事件

本文关键字:WM POINTER 事件 Windows WndProc 获取 | 更新日期: 2023-09-27 18:20:42

我在Visual Studiio 2013中创建了一个DLL,用于处理操纵事件并输出精细的平移、旋转和缩放。之后,我尝试将其与OpenGL项目合并,以提供适当的手势支持。

DLL是在选择.NET4.0客户端配置文件的情况下构建的,我在VS2013中用一个简单的实现对其进行了测试。一切都很完美,设置也很简单。

现在OpenGL项目是在VS2010中维护和开发的,所以我启动了VS2010,引用了我的DLL,并对WndProc进行了覆盖,以将WM_POINTER*事件获取到我的DLL中。

问题是我不了解事件我一次也没收到WM_POINTER*事件。

我有一些想法:

  • 开发机器是Win7,测试机器是WIN8——也许在构建时需要一些WIN8功能?

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

  • Windows以某种方式确定我不想要WM_POINTER*事件,因为我运行的应用程序不是为Windows 8明确开发的(不确定如何更改)

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

我非常绝望,不知道还能做什么。

如果有任何有WIN8Pointer经验的人能帮助我,我将非常高兴。

干杯!

编辑:忘了提OpenGL项目基本上是一个WinForms应用程序

在WndProc中未获取Windows 8 WM_POINTER*事件

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

对于任何对此结结巴巴的人:

Reddit用户darinitis写了这个

你在VS2013中有OpenGL窗口吗?还是测试只是为了在winforms项目中捕捉手势?

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

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

而且就在现场。我的OpenGL孩子没有转发事件,而是试图处理它们。通过这种方式,我的WinForms应用程序中从未出现任何内容。