Подтвердить что ты не робот

Каковы отношения CloseWindow и WM_CLOSE

Я немного запутался: WM_CLOSE и ::CloseWindow каким-либо образом "связаны" или для совершенно разных вещей?

Документы для Закрытие Windows вообще не упоминают функцию API CloseWindow. Должен ли CloseWindow действительно называться "MinimizeWindow" или что мне не хватает?

4b9b3361

Ответ 1

CloseWindow и WM_CLOSE полностью не связаны. Функция CloseWindow плохо названа. Его обратная функция, OpenWindow также плохо названа, учитывая, что она восстанавливает окна.

Я подозреваю, что эти имена датируются очень длинным способом, вероятно, для Windows версии 1 или 2. Я предполагаю, что то, что мы теперь называем минимизацией и восстановлением, было тогда замкнуто и открыто.

Обычным способом свернуть или восстановить окно является вызов ShowWindow передачи SW_MINIMIZE или SW_RESTORE.

Я предлагаю вам забыть обо всех CloseWindow и OpenWindow.

Ответ 2

CloseWindow - необычно слабо названная функция winapi. Это фактически не закрывает окно, оно просто сводит к минимуму его. Возможно, вы имели в виду DestroyWindow().

WM_CLOSE обычно является сообщением, генерируемым процедурой окна по умолчанию, в ответ на нажатие кнопки Alt + F4 или нажатие кнопки закрытия окна. Основное сообщение - WM_SYSCOMMAND, SC_CLOSE. Он также может быть сгенерирован в коде, например, в меню Window + Close.

Вы можете слушать WM_CLOSE в своей оконной процедуре или в карте сообщений MFC. Пользователь ожидает, что окно будет закрыто. Поэтому обычно вызывается DestroyWindow(). Вам не обязательно, вы можете отобразить окно сообщения, например, и спросить пользователя, должны ли данные быть сохранены. И если он нажимает "Нет", вы не вызываете DestroyWindow().