我正在使用带有 fChanged(第 4 个参数)= true 的 joySetCapture。
只有在位置发生变化时我才会收到消息,这是我应该做的。 但是,按下操纵杆按钮时我没有收到任何消息。
如果我使用 fChanged = false,定期消息的 wParam 会正确更新。
如何在不使用定期消息的情况下仅在位置或按钮发生变化时接收消息?
最佳答案
joySetCapture
的文档表示如果 fChanged
为真,则当位置变化超过阈值时,仅发送消息。由于它没有提到按钮,我假设它在按下按钮时不会发送消息。这对我来说似乎是糟糕的设计,但如果是这样,那么你必须处理它。
您为什么不想使用定期轮询消息?只要您将轮询间隔设置为合理的值(例如 60 Hz 刷新率时为 16 毫秒),我可以向您保证轮询操纵杆不会成为您应用程序的瓶颈,因此这不是性能问题.没有理由将轮询间隔设置得非常小,因为硬件根本不会那么快地发送更新,所以您只会浪费周期来处理相同的数据。
最后,多媒体操纵杆 API 有点过时并且已被 DirectX 取代。您应该改用 DirectInput,以便您可以处理具有 4 个以上按钮或 2 个以上轴的操纵杆。此外,如果您使用的是 Xbox 360 Controller ,则应使用 XInput 库来处理这些 Controller 。
关于c++ - joySetCapture 不适用于 fChanged = false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/791002/