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

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

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

Ответ 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().