1

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

4

3 回答 3

3

如果您正在使用诸如此类的 Win32 控件,CreateWindowEx(NULL, L"BUTTON", ...则每个控件实际上都是一个子窗口,并且在获得焦点后正在捕获所有窗口消息。

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

于 2013-05-08T18:47:21.877 回答
1

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

yourwindow->SetFocus(); 

或使用winapi:

::SetFocus(hWnd);
于 2013-05-08T18:45:37.607 回答
0

万一有人想知道,我(不出所料)注意到在我的 WindowProcedure 回调中处理 WM_CHAR 响应的行为也相同。一旦您单击一个按钮,焦点就会从主窗口变为按钮控件(这是一个子窗口),并且键盘按下不再有任何效果。

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

case DEL__BUTTON:{
     <Button specific code>
     SetFocus(hwnd);
     return 0;
   }
于 2020-08-27T11:00:08.417 回答