@Mr-Governor
Губернирую

WinAPI :: Что происходит при закрытии программы в виндовс?

Приветствую всех!
Изучаю WinAPI, стал интересен момент закрытия программы, то есть выброс сообщения WM_DESTROY. Не могу понять следующий момент, постараюсь объяснить:

Когда я нажимаю на крестик в верхней области окна (или Alt+F4), виндовс, моей программе присылает сообщение WM_DESTROY при этом сама (винда) скрывает мое окно.
Я подумал, а что если отвергнув сообщение WM_DESTROY, не завершать работу программы и отобразить окно снова.

На обработке сообщения, стоит следующий код:
case WM_DESTROY :
	if (MessageBox(hwnd, "Пришла просьба закрыться!","!!!", MB_OKCANCEL) == IDOK )
	{
		PostQuitMessage(0) ;
	}
	else
	{
		ShowWindow(hwnd, SW_NORMAL);
	}			   
return 0 ;


При том, что я нажимаю "Отмена", окно не отображается и процесс программы не закрылся!

Кто нибудь может пояснить что конкретно происходит при закрытии программы?
И почему виндовс при закрытии, раньше времени, пока еще работает WinMain, скрывает мою клиентскую область?
  • Вопрос задан
  • 953 просмотра
Решения вопроса 1
Используйте обработку события WM_CLOSE чтобы предотвратить закрытие окна.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@rPman
wm_destroy это просто просьба к приложению, закрыть окно (не приложение)
по неписанным правилам ui, в windows, по закрытию последнего окна приложения (их может быть несколько) само приложение должно быть закрыто.

В вашем случае при отмене необходимо вернуть в return кажется true (посмотрите документацию) этим вы скажете вызывающей функции что процесс передумал закрывать окно и не будет его удалять. Смутно помню что вы должны были перед return еще какой то метод вызвать - обработчик событий окна по умолчанию, вот как раз при отмене закрытия его вызывать не нужно будет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы