C++ не может открыть дочернее окно после его закрытия

У меня проблемы с окном моего ребенка. Я использую кнопку из 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);

Почему я могу открыть свое дочернее окно только один раз?

Спасибо

2 ответа

Решение

DestroyWindow разрушает окно полностью. После этого звонка он больше не существует. Таким образом, вы не можете затем показать это снова с ShowWindow - Вы должны фактически создать это снова с нуля.

Вместо звонка DestroyWindow чтобы скрыть это, используйте ShowWindow(chwnd, SW_HIDE);

Тебе нужен флаг SW_RESTORE в вашем ShowWindow вызов при восстановлении свернутого (или закрытого) окна.

Другие вопросы по тегам