我正在用fChanged (第4个参数)= true使用joySetCapture 。
我只在位置发生变化时才会收到消息,因为我应该这样做。 但是,按下游戏杆button时,我没有收到任何消息。
如果我使用fChanged = false,则周期性消息的wParam会正确更新。
我怎么才能得到消息只有当任何位置或button更改,而不使用定期的消息?
joySetCapture
的文档说,如果fChanged
为true,那么只有在位置变化超过阈值时才会发送消息。 由于它没有提到按钮,我会假设按钮按下时不发送消息。 这对我来说似乎是一个糟糕的设计,但如果是这样的话,那么你必须处理它。
你为什么不想使用定期的轮询消息? 只要您将轮询间隔设置为合理的值(例如对于60 Hz刷新率为16 ms),我可以向您保证轮询游戏杆不会成为您的应用程序的瓶颈,所以这不是性能问题。 没有理由将轮询时间间隔设置为非常小,因为硬件无法快速发送更新,所以您只会浪费处理相同数据的周期。
最后,多媒体游戏杆API有些过时,并被DirectX所取代。 您应该使用DirectInput,以便您可以处理具有4个以上按钮或2个以上轴的游戏杆。 此外,如果您使用Xbox 360控制器,则应该使用XInput库来处理这些控制器。
除非在Win98之前需要兼容Windows,为什么不直接使用DirectInput API呢? 无论如何,joy * API只是DirectInput API的一个包装。