Каковы отношения 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()
.