C++ Win32API WM_KEYDOWN and buttons

C++ Win32API WM_KEYDOWN and buttons

本文关键字:and buttons KEYDOWN Win32API WM C++      更新时间:2023-10-16

我在WM_KEYDOWN接收消息时遇到问题。WM_KEYDOWN工作只是很好,直到我点击任何按钮在我的应用程序。从那时起,它不再接收我的输入从键盘。如何解决这个问题?

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

一旦按钮被点击,你可以捕获WM_COMMAND - BM_CLICK消息,然后调用SetFocus(hwnd)重新聚焦在你的窗口(如Giswin提到的)。

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

yourwindow->SetFocus(); 

或使用winapi:

::SetFocus(hWnd);

以防有人想知道,我(毫不奇怪)注意到在我的WindowProcedure回调中处理WM_CHAR响应的相同行为也是如此。一旦你点击一个按钮,焦点就会从主窗口转移到按钮控件(这是一个子窗口),并且键盘按下不再有任何效果。

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

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