我需要幫助WM_KEYDOWN
,我想刪除第一個按鍵和重複按鍵之間的「暫停」。需要幫助WM_KEYDOWN
如果你不斷按住一個按鈕,我希望程序直接實現它。
我試圖用directx做遊戲。請告訴我是否應該使用WM_KEYDOWN
以外的東西。
我需要幫助WM_KEYDOWN
,我想刪除第一個按鍵和重複按鍵之間的「暫停」。需要幫助WM_KEYDOWN
如果你不斷按住一個按鈕,我希望程序直接實現它。
我試圖用directx做遊戲。請告訴我是否應該使用WM_KEYDOWN
以外的東西。
請定義「連續」。如果用戶立即按下一個按鈕並立即釋放它,您將立即得到WM_KEYDOWN和WM_KEYUP事件。否則,如果用戶在一段時間內沒有釋放密鑰,Windows將使用一些內部計時器檢測到它,並繼續觸發WM_KEYDOWN事件,直到釋放一個按鈕。
你不能做太多的事情,因爲你必須等待一段時間才能知道按鈕是否被按下而沒有被釋放。
但是,您可以做的事情是忽略來自Windows的持續WM_KEYDOWN事件,並將按鈕視爲被按下,而不會釋放,直到您收到WM_KEYUP事件。我們稱之爲賭注,或者更好的是分支優化。
這可能不完全是您之後的行爲,但是您不能直接忽略更多WM_KEYDOWN
消息,直到您收到WM_KEYUP
?
您可以使用布爾變量並將其設置爲true,當一個鍵被關閉時。如果變量的值爲true,則停止執行該操作。當密鑰啓動時,您將該變量設置爲false。
// ...
some switch
// ...
case WM_KEYDOWN:
if (!keydown) {
// do the magic
keydown=true;
}
break;
case WM_KEYUP:
keydown=false;
break;
當然,如果你想繼續做一些事情,你應該例如設置一個計時器,在if(!的keydown)語句,當用戶釋放鍵停止計時器。
有一個標誌與WM_KEYDOWN指示是否WM_KEYDOWN是第一個或重複的。只需搜索WM_KEYDOWN的MSDN,您應該可以找到它。
來自MSDN: lParam位30:指定以前的鍵狀態。如果密鑰在發送消息之前已關閉,則值爲1;如果密鑰已啓用,則值爲零。
按鍵重複延遲和按鍵重複頻率通常在BIOS中設置 – 2010-08-31 20:22:29