2011-05-09 106 views
0

我收到的第一個消息框,但不是第二個,當我按下Ctrl鍵+輸入一起。我怎樣才能解決這個問題?如何處理按Ctrl + X快捷鍵

case WM_KEYDOWN: 
    if (GetKeyState(VK_CONTROL) & 0x8000) { 
     MessageBox(0, "Ctrl", "Key", 0); 
     switch (wParam) { 
      case VK_RETURN: 
       MessageBox(0, "Enter", "Key", 0); 
       break; 
     } 
    } 
    break; 
+2

您的意思是使用加速器來處理此類鍵盤操作 – 2011-05-09 19:44:20

+0

謝謝!不幸的是,我不能在這裏接受你的答案...... – Midas 2011-05-09 20:15:00

+1

好的,有一個答案讓你接受!我沒有把它作爲第一個答案,因爲我不確定你是否會接受另一種方法 - 不是每個人都是! – 2011-05-09 20:17:10

回答

3

而不是處理低級別按鍵事件,最好用加速器來處理這種鍵盤操作。

1

加速器通常用於應用程序級命令 - 例如, Ctrl-N打開一個新文檔。如果這個組合鍵是特定於這個HWND - 例如。如果它是一個控制特定的鍵盤命令,那麼在控制系統中處理它就是一種方法。

我對你的代碼中發生了什麼的猜測如下:當你點擊Ctrl + Enter時,Windows會生成兩條WM_KEYDOWN消息;一個用於CTRL,另一個用於ENTER。當你得到一個CTRL時,你會顯示消息框,現在它的內部消息循環接管了 - 它將會得到任何進一步的輸入,直到它被解散。

嘗試丟棄第一個MessageBox(你知道你正在碰到那個點),然後看看第二個是否被擊中。或者使用一些不會干擾輸入的診斷輸出技術(例如OutputDebugString())。