Они совершенно разные.
WM_CLOSE
отправляется в окно, когда нажимается «X» или выбирается «Закрыть» из меню окна. Если вы поймете это сообщение, это ваш призыв, как его обработать - игнорируйте его или действительно закройте окно. По умолчанию, WM_CLOSE
, переданный DefWindowProc
, вызывает разрушение окна. Когда окно разрушается, WM_DESTROY
отправляется сообщение. На этом этапе, в отличие от WM_CLOSE
, вы не можете остановить процесс, вы можете только сделать необходимую очистку. Но помните, что когда вы ловите WM_DESTROY
как раз перед тем, как все дочерние окна уже уничтожены. WM_NCDESTROY
отправляется сразу после уничтожения всех дочерних окон.
Сообщение
WM_QUIT
не относится ни к какому окну (hwnd
, полученное из GetMessage
, равно NULL, и оконная процедура не вызывается) Это сообщение указывает, что цикл сообщений должен быть остановлен, а приложение должно быть закрыто. Когда GetMessage
читает WM_QUIT
, он возвращает 0, чтобы указать это. Взгляните на типичный фрагмент цикла сообщения - цикл продолжается, пока GetMessage
возвращает ненулевое значение. WM_QUIT
можно отправить с помощью функции PostQuitMessage
. Эта функция обычно вызывается, когда главное окно получает WM_DESTROY
(см. типичный фрагмент процедуры окна ).