Задать вопрос
@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, скрывает мою клиентскую область?
  • Вопрос задан
  • 1020 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
Используйте обработку события WM_CLOSE чтобы предотвратить закрытие окна.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@rPman
wm_destroy это просто просьба к приложению, закрыть окно (не приложение)
по неписанным правилам ui, в windows, по закрытию последнего окна приложения (их может быть несколько) само приложение должно быть закрыто.

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

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

Похожие вопросы