C ++ Win32API WM_KEYDOWN和按钮

时间:2013-05-08 18:39:55

标签: c++ winapi button

我在WM_KEYDOWN中收到邮件时遇到问题。 WM_KEYDOWN工作正常,直到我点击我的应用程序中的任何按钮。从那时起,它不再从键盘接收我的输入。如何解决?

3 个答案:

答案 0 :(得分:2)

如果您使用的是Win32控件,例如CreateWindowEx(NULL, L"BUTTON", ...,那么这是预期的每个控件实际上都是一个子窗口,并且在获得焦点后捕获所有窗口消息。

单击按钮后,您可以捕获WM_COMMAND - BM_CLICK消息,然后调用SetFocus(hwnd)重新聚焦窗口(如Giswin所述)。

答案 1 :(得分:1)

在您点击应用上的任何按钮之前,您的窗口可能没有焦点。您可以在应用中的某处添加代码以编程方式设置焦点:

yourwindow->SetFocus(); 

或使用winapi:

::SetFocus(hWnd);

答案 2 :(得分:0)

以防万一,在我的WindowProcedure回调中,我(毫不奇怪)也注意到了处理WM_CHAR响应的相同行为。单击按钮后,焦点将从主窗口更改为按钮控件(这是一个子窗口),并且按键盘键不再起作用。

如@NTSCCobalt所建议,在您的WM_COMMAND案例中添加一个简单的SetFocus(主窗口处理程序)将解决此问题,例如

case DEL__BUTTON:{
     <Button specific code>
     SetFocus(hwnd);
     return 0;
   }