我在WM_KEYDOWN中收到邮件时遇到问题。 WM_KEYDOWN工作正常,直到我点击我的应用程序中的任何按钮。从那时起,它不再从键盘接收我的输入。如何解决?
答案 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;
}