2009-04-26 18 views
1

我正在使用joySetCapture與fChanged(第4個參數)= true。joySetCapture無法使用fChanged = false

我只在位置發生變化時纔會收到消息,因爲我應該這樣做。 但是,當按下操縱桿按鈕時,我沒有收到任何消息。

如果我使用fChanged = false,則週期性消息的wParam會正確更新。

如何在不使用定期消息的情況下更改位置或按鈕時只能獲得消息

回答

1

joySetCapture的文檔說如果fChanged爲真,那麼消息是只有當位置變化超過閾值時發送。由於它沒有提及按鈕,我會假定按下按鈕時它不發送消息。這對我來說似乎是一個糟糕的設計,但如果是這樣的話,那麼你必須處理它。

爲什麼你不想使用定期輪詢消息?只要您將輪詢間隔設置爲合理的值(例如對於60 Hz刷新率爲16 ms),我可以向您保證輪詢遊戲杆不會成爲應用程序的瓶頸,因此它不是性能問題。沒有理由將輪詢時間間隔設置爲非常小的事件,因爲硬件不會發送更快的更新,所以您只會浪費處理相同數據的週期。

最後,多媒體遊戲手柄API有些過時並且已被DirectX取代。您應該使用DirectInput,以便您可以處理具有4個以上按鈕或2個以上軸的遊戲杆。此外,如果您使用的是Xbox 360控制器,則應該使用XInput庫來處理這些控制器。

1

除非在Win98之前需要與Windows兼容,爲什麼不直接使用DirectInput API呢?無論如何,joy * API僅僅是圍繞着DirectInput API的封裝。