Aiiieeeeeeeeeeee. Не делай ЛЮБОГО из этих вещей!
exit () и ExitProcess эквивалентны взятию пистолета и стрельбе по лицу. Надеюсь, мне не нужно объяснять, почему это нехорошо, особенно для процессы, которые содержат общие объекты, такие как дескрипторы базы данных, которые могут быть общесистемными. Я знаю, что это норма в Android, но это Windows, и мы этого не делаем ».
Вызов PostQuitMessage () напрямую может вызвать утечки памяти. PostQuitMessage () предназначен для вызова из WM_DESTROY. Это НЕ НЕ НЕ сообщение, предназначенное для того, чтобы попросить закрыть окно. Это механизм обратного вызова, позволяющий приложениям отправлять свой код выхода обратно в оболочку. Он предназначен для заполнения WM_QUIT кодом завершения приложения. Если вы вызываете PostQuitMessage () напрямую, вы полностью обойдете WM_DESTROY. Это проблематично, потому что многие окна - и дочерние виджеты - очень правильно выполняют свою очистку в WM_DESTROY. Если вы пропустите это сообщение, лежа на окне, вы лишите компоненты возможности очистить.
И поскольку мы обсуждаем эту тему, также не вызывает напрямую WM_DESTROY. У Раймонда Чена из Microsoft есть замечательная статья, в которой он объясняет "Отправка окна сообщение WM_DESTROY похоже на шутку, призывающую кого-то притворяться полицией ". Это своего рода злой двойник PostQuitMessage. Вместо того, чтобы выходить без очистки, вы просите окно очистить без выхода. Менеджер окон никогда не знает, как удалить компоненты, и у вас остается мертвое бесхозное окно в памяти. Вздох.
Правильный ответ - опубликовать WM_CLOSE. Все, что использует оконную процедуру по умолчанию, будет правильно уведомлять оконный менеджер об уничтожении окна, которое будет каскадно переходить к WM_DESTROY, а затем к WM_QUIT, как и предполагалось.
Если вам нужно поведение, отличное от стандартного закрытия, другой альтернативой является создание сообщения WM_USER или WM_APP. Если ваше окно имеет «причудливый» WM_CLOSE - скажем, например, вы даете отправьте пользователю приглашение «Вы уверены, что хотите выйти?» - и если вы хотите пропустить это, вы можете определить собственное сообщение с помощью WM_USER или WM_APP и вызвать его вместо него. Ваше сообщение, определенное приложением, будет реализовывать поведение закрытия по умолчанию, а WM_CLOSE, который привязан к системным гаджетам, выполняет ваше причудливое поведение.
Надеюсь, это поможет!