我创建了一个按钮。单击按钮后,它可以工作,但单击后我无法与主窗口交互(例如按箭头键)。当我单击主窗口外部(取消主窗口上的焦点)时,然后单击主窗口(焦点在主窗口上),然后我可以与主窗口交互。我不知道发生了什么事。 这是代码 链接 按钮创建如下。
inline void Button::create_button() {
const auto _button_width = button_wrapper_.right - button_wrapper_.left;
const auto _button_height = button_wrapper_.bottom - button_wrapper_.top;
auto _button_hwnd = CreateWindow(
L"Button",
text_,
WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
button_wrapper_.left,
button_wrapper_.top,
_button_width,
_button_height,
parent_hwnd_,
nullptr,
reinterpret_cast<HINSTANCE>(GetWindowLongPtr(parent_hwnd_, GWLP_HINSTANCE)),
nullptr);
}
我尝试在单击按钮后重新聚焦主窗口,但它不起作用。 我尝试创建按钮作为 Win32 教程,但它仍然不起作用(也许我误解了它?)
问题是当我们单击按钮时,按钮“窃取了焦点”,因此窗口不再接收 WM_KEYDOWN 消息。另请参阅以下内容:按下子按钮时,C++ 窗口失去焦点
有多种方法可以修复它,但在这种情况下,更简单的方法是在单击按钮后立即添加 SetFocus 调用,如下所示:
case WM_COMMAND: {
switch (LOWORD(w_param)) {
case BN_CLICKED: {
board_controller_.reset_board();
SetFocus(m_hwnd_); // add this here to give focus back to window
break;
}
}
return 0;