我正在将 joySetCapture 与fChanged(第4个参数)= true一起使用。

我只在位置改变时才收到消息,这是应该的。
但是,按下操纵杆按钮时没有收到任何消息。

如果我使用fChanged = false,则定期消息的wParam会正确更新。

如何仅在更改位置或按钮时不使用定期消息而获得消息?

最佳答案

joySetCapture 的文档说,如果fChanged为true,则仅当位置变化超过阈值时才发送消息。由于它没有提及按钮,因此我假设在按下按钮时它不会发送消息。在我看来,这似乎是糟糕的设计,但是如果是那样的话,那么您就必须应对它。

您为什么不想使用定期轮询消息?只要将轮询间隔设置为合理的值(例如60 ms刷新率的16毫秒),我就可以向您保证,对操纵杆进行轮询不会成为应用程序的瓶颈,因此这不是性能问题。没有必要将轮询间隔设置为非常小的值,因为硬件根本不会以如此快的速度发出更新,因此您只会浪费处理相同数据的周期。

最后,多媒体游戏杆API的版本已过时,并且已被DirectX取代。您应该改用DirectInput,以便可以使用超过4个按钮或超过2个轴的操纵杆。此外,如果您使用Xbox 360 Controller ,则应使用XInput库来处理那些。

10-06 07:01