点击子窗口后,无法与父窗口交互

问题描述 投票:0回答:1

我创建了一个按钮。单击按钮后,它可以工作,但单击后我无法与主窗口交互(例如按箭头键)。当我单击主窗口外部(取消主窗口上的焦点)时,然后单击主窗口(焦点在主窗口上),然后我可以与主窗口交互。我不知道发生了什么事。 这是代码 链接 按钮创建如下。

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 教程,但它仍然不起作用(也许我误解了它?)

winapi direct2d
1个回答
0
投票

问题是当我们单击按钮时,按钮“窃取了焦点”,因此窗口不再接收 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;
© www.soinside.com 2019 - 2024. All rights reserved.