joySetCapture不适用于fChanged = false

时间:2009-04-26 14:58:37

标签: c++ windows

我正在使用 joySetCapture 和fChanged(第4个参数)= true。

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

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

如果更改位置或按钮,如何更改消息 ,而不使用定期消息?

2 个答案:

答案 0 :(得分:1)

joySetCapture的文档说明如果fChanged为真,那么当位置变化超过阈值时,消息仅 发送。由于它没有提到按钮,我认为按下按钮时它不会发送消息。这对我来说似乎很糟糕,但如果是这样,那么你必须处理它。

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

最后,多媒体操纵杆API有些过时,已被DirectX取代。您应该使用DirectInput,以便您可以处理具有4个以上按钮或2个以上轴的操纵杆。此外,如果您使用的是Xbox 360控制器,则应使用XInput库来处理这些控制器。

答案 1 :(得分:1)

除非您需要在Win98之前与Windows兼容,为什么不直接使用DirectInput API?无论如何,joy * API只是DirectInput API的包装。