2010-08-31 78 views
1

我需要幫助WM_KEYDOWN,我想刪除第一個按鍵和重複按鍵之間的「暫停」。需要幫助WM_KEYDOWN

如果你不斷按住一個按鈕,我希望程序直接實現它。

我試圖用directx做遊戲。請告訴我是否應該使用WM_KEYDOWN以外的東西。

+0

按鍵重複延遲和按鍵重複頻率通常在BIOS中設置 – 2010-08-31 20:22:29

回答

2

請定義「連續」。如果用戶立即按下一個按鈕並立即釋放它,您將立即得到WM_KEYDOWNWM_KEYUP事件。否則,如果用戶在一段時間內沒有釋放密鑰,Windows將使用一些內部計時器檢測到它,並繼續觸發WM_KEYDOWN事件,直到釋放一個按鈕。

你不能做太多的事情,因爲你必須等待一段時間才能知道按鈕是否被按下而沒有被釋放。

但是,您可以做的事情是忽略來自Windows的持續WM_KEYDOWN事件,並將按鈕視爲被按下,而不會釋放,直到您收到WM_KEYUP事件。我們稱之爲賭注,或者更好的是分支優化。

2

這可能不完全是您之後的行爲,但是您不能直接忽略更多WM_KEYDOWN消息,直到您收到WM_KEYUP

1

您可以使用布爾變量並將其設置爲true,當一個鍵被關閉時。如果變量的值爲true,則停止執行該操作。當密鑰啓動時,您將該變量設置爲false。

// ... 
some switch 
// ... 
case WM_KEYDOWN: 
    if (!keydown) { 
     // do the magic 
     keydown=true; 
    } 
break; 
case WM_KEYUP: 
    keydown=false; 
break; 

當然,如果你想繼續做一些事情,你應該例如設置一個計時器,在if(!的keydown)語句,當用戶釋放鍵停止計時器。

0

有一個標誌與WM_KEYDOWN指示是否WM_KEYDOWN是第一個或重複的。只需搜索WM_KEYDOWN的MSDN,您應該可以找到它。

來自MSDN: lParam位30:指定以前的鍵狀態。如果密鑰在發送消息之前已關閉,則值爲1;如果密鑰已啓用,則值爲零。