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

问题描述 投票:0回答:3

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

DLL 是在选择 .NET 4.0 Client Profile 的情况下构建的,我在 VS2013 中使用简单的实现对其进行了测试。一切都完美无缺,设置也非常简单。

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

问题是我没有收到事件!我一次都没有成功接收到 WM_POINTER* 事件。

我有一些想法:

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

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

  • 当我运行未明确为 Windows 8 开发的应用程序时,Windows 以某种方式确定我不需要 WM_POINTER* 事件(不知道如何更改)

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

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

如果有 WIN8 指针经验的人可以帮助我,我会非常高兴。

干杯!

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

c# winapi windows-8 touch gestures
3个回答
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?论坛=tabletandtouch


1
投票

对于任何遇到此问题的人:

Reddit-用户 darinitis 写了这篇文章

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

OpenGL 可能会在您的前面创建一个窗口,或者作为您的子窗口 winforms 窗口。因为指针实际上从未位于您的上方 窗口(在 GL 窗口上),您不会收到指针消息。

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

并且就在现场。我的 OpenGL 孩子没有转发事件,而是尝试处理它们。这样我的 WinForms 应用程序中就不会收到任何内容。


0
投票

就我而言,我没有从 Wacom 平板电脑接收 WM_Pointer 事件,因为我必须在平板电脑设置中启用 Windows Ink...您可以通过转到某些绘图应用程序(如 Photoshop)来测试这一点,看看笔压力是否有效,如果如果没有,那么您没有收到 WM_POINTER 消息可能不是您的应用程序的错误!

如果你想让鼠标生成指针事件,你必须调用 EnableMouseInPointer(true)

© www.soinside.com 2019 - 2024. All rights reserved.