2011-05-09 89 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())。