c++在关闭子窗口后无法打开它

c++ not able to open child window after closing it

本文关键字:窗口 c++      更新时间:2023-10-16

我的子窗口有一些问题。我使用AppendMenu中的一个按钮来打开它,但在关闭子窗口后,我再也无法打开它了。

代码:

WNDCLASSEX chwincl;
chwincl.hInstance = hThisInstance;
chwincl.lpszClassName = "Child";
chwincl.lpfnWndProc = ChildProcedure;
chwincl.style = CS_DBLCLKS;
chwincl.cbSize = sizeof(WNDCLASSEX);
chwincl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
chwincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
chwincl.hCursor = LoadCursor(NULL, IDC_ARROW);
chwincl.lpszMenuName = NULL;
chwincl.cbClsExtra = 0;
chwincl.cbWndExtra = 0;
chwincl.hbrBackground = (HBRUSH)(COLOR_BACKGROUND);
if (!RegisterClassEx(&chwincl))
    return 2;
chwnd = CreateWindowEx(0,
    "Child",
    "Add...",
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    300,
    150,
    HWND_DESKTOP,
    NULL,
    hThisInstance,
    NULL);

我用这个打开儿童窗口:

if (LOWORD(wParam) == ID_Click) {
        ShowWindow(chwnd, SW_SHOWDEFAULT);
        UpdateWindow(chwnd);
    }

我用这个结束:

DestroyWindow(chwnd);

为什么我只能打开孩子的窗户一次?

感谢

DestroyWindow完全破坏了窗口。在那次通话之后,它就不复存在了。所以你不能用ShowWindow再次显示它——你必须从头开始重新创建它。

与其调用DestroyWindow来隐藏它,不如使用ShowWindow(chwnd, SW_HIDE);

在恢复最小化(或关闭)窗口时,需要在ShowWindow调用中使用标志SW_RESTORE