繁体   English   中英

C++ Win32API WM_KEYDOWN 和按钮

[英]C++ Win32API WM_KEYDOWN and buttons

我在 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;
   }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM