WM_KEYDOWN没有响应

时间:2013-11-15 19:15:45

标签: c++ winapi callback messagebox onkeydown

如果 WM_KEYDOWN 有一个messagebox(),以便了解此案例的功能。

有人可以帮助我为什么这个案子没有回应?

我正在尝试调试这个,而我从键盘插入一些字母,调试器没有进入 WM_KEYDOWN 的情况。

感谢所有人!

这是我的代码:

LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
  switch( msg )
  {
  case WM_CREATE:
    break;
  case WM_COMMAND:
    break;
  case WM_KEYDOWN:
    MessageBox(NULL,L"test",L"Information",MB_ICONINFORMATION);
    break;
  case WM_DESTROY:
    // DESTROY WINDOW
    break;
  default:
    return DefWindowProc( hwnd, msg, wParam, lParam );
  }
  return  0;
}

1 个答案:

答案 0 :(得分:3)

MessageBox()显示一个弹出对话框,然后运行自己的模态消息循环来为该对话框提供消息,直到它关闭。当对话框处于活动状态时,您的击键将转到该对话框而不是WndProc()所属的窗口。这就是为什么您没有收到更多WM_KEYDOWN条消息的原因。您不应该使用MessageBox()作为UI消息的调试工具,因为它会更改UI消息的流程。请改用OutputDebugString()。这样,您的调试器(或者像SysInternals DebugView这样的外部查看器)可以显示调试消息,而不会影响UI的行为。