【问题标题】:How can I close a child window without closing the parent?如何在不关闭父窗口的情况下关闭子窗口?
【发布时间】:2012-02-06 19:31:28
【问题描述】:

我有一个有 5 个子窗口的窗口。如何在不关闭父窗口的情况下关闭子窗口?

【问题讨论】:

    标签: c++ winapi window


    【解决方案1】:

    大概你有子窗口的句柄?如果是这样,那么只需使用DestroyWindow

    编辑:

    您应该在主“窗口”中定义一个 WndProc 方法来处理来自子窗口的回调。您可以使用它来定义要对每条消息执行的操作。在你的情况下,你想调用destroyWindow。

    类似这样的:

    LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
        switch(msg)
        {
            case WM_CLOSE:
                DestroyWindow(hwnd);
            break;
            default:
                return DefWindowProc(hwnd, msg, wParam, lParam);
        }
        return 0;
    }
    

    【讨论】:

    • 当我点击“关闭窗口”(在子窗口上)时,我发送了一条消息“WM_CLOSE”我如何过滤他?
    • 不要发送WM_CLOSE。致电DestroyWindow。您使用的是子窗口句柄,而不是我认为的父窗口句柄。
    • 哦,好吧,但现在我遇到了一个新问题。例如,我创建了一个 4 个子窗口,当我关闭第 3 次关闭和第 4 次时,如果我关闭第 2 次关闭第 3 次和第 4 次等等。为什么?
    • 猜测一下,您的 4 个窗口并不都是同一个父级的子级。 4 是 3 的孩子,这是 2 的孩子,这是 1 的孩子。如果你杀死 2,那么 3 和 4 也必须死..
    • 我创建了大量的 hWnd。 hWndChild[q] = CreateWindow ( .. hWnd, ... );这是错的? hWnd - 我的父窗口
    【解决方案2】:

    这发生在我身上。我在为我的子窗口注册的窗口过程中添加了一个案例WM_DESTROY。这导致我的整个应用程序退出。删除后,一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      • 2013-02-14
      相关资源
      最近更新 更多