2012-05-17 153 views
1

我一直在試圖追查我程序中的一個錯誤。我注意到,無論何時按住向上和向左箭頭鍵並按空格鍵,WPARAM爲VK_SPACE的WM_KEYDOWN消息都不會被我的WndProc接收或處理。WM_KEYDOWN消息未發送

我有點好奇,所以打開了Spy ++並開始查看發送到我窗口的消息。我注意到,當我按住左箭頭鍵和上箭頭鍵並按另一個鍵時,說A,WM_KEYDOWN(以及WM_CHAR)消息被髮送到我的窗口。

但是,如果我按住向上和向左箭頭鍵並按空格鍵,則空格鍵擊中的WM_KEYDOWN消息不會發送到我的窗口。

這是什麼原因?有誰能證實這種行爲?

回答

2

發生這種情況是因爲您的鍵盤正在執行稱爲ghosting的操作。這對於今天人們使用的大多數鍵盤來說是正常的。它的連接方式使得製造起來便宜很多,因此,這樣的事情一致發生。

基本上,當同一行/列中的三個鍵被同時按下時,它們不能全部被唯一標識,導致至少一個不通過。您唯一能做的就是購買一個反重影鍵盤,或重新設計您的控制以避免衝突。

在個人層面上,我在介紹我的遊戲之前,在一兩天之內就發現了這一點,最終不得不讓控制器像P1:SZXC和空間以及P2:/ 789和+一樣。事先知道這確實是一件好事。

+0

我認爲就是這樣。感謝您的鏈接。這是一個恥辱,因爲箭頭鍵和空格鍵看起來很合適。 – user974967

+1

@ user974967,確實,我也很驚訝。在閱讀之後,我試圖找到一個使用那種衝突的控件的遊戲,但是我很驚訝我找不到任何東西。那天我贏得了對遊戲程序員更多的尊重。我想這是WASD如此受歡迎的原因之一,人們甚至不知道它。 – chris

+0

WSAD也很受歡迎,因爲大多數人都是右撇子,因此這是讓您的非鼠標手休息的更方便的地方。如果您有超過3個鍵一起使用,您可能需要重新評估您的用戶輸入界面,以及我不能想到任何您一次按3鍵以上的遊戲。 – AJG85