In InitInstance ()
Выход из приложения, пока вы находитесь в InitInstance()
: просто верните FALSE
из InitInstance()
.
В главном цикле сообщений
Это еще одна история, если вы уже находитесь в цикле сообщений: стандартный способ закрыть приложение - выйти из цикла сообщений:
PostQuitMessage(0)
, как следует из названия, отправляет сообщение WM_QUIT
. Цикл сообщений реагирует, выходя из цикла и закрывая программу.
Но вы не должны просто делать это: вы должны закрыть открытые окна в вашем приложении.
Предполагая, что у вас есть только ваше главное окно, вы должны уничтожить его, позвонив по номеру
m_pMainWindow->DestroyWindow();
MFC отреагирует на вас PostQuitMessage()
, поэтому выйдите из основного цикла сообщений и закройте ваше приложение.
Еще лучше, вы должны опубликовать WM_CLOSE
, чтобы ваше главное окно изящно закрылось. Например, он может решить сохранить текущий документ. Но будьте осторожны: стандартный обработчик OnClose()
может предложить пользователю сохранить грязные документы. Пользователь может даже отменить действие закрытия, используя это приглашение (Сохранить документ? Да, Нет, Отмена).
Уничтожив главное окно, вы отправите ему сообщение WM_DESTROY
. MFC реагирует, вызывая PostQuitMessage(0)
для выхода из насоса сообщений. (На самом деле MFC выполняет вызов в OnNcDestroy()
, поскольку WM_NCDESTROY
, что является абсолютным последним сообщением, полученным окном)
Диалоговое приложение
Позвонить EndDialog(-1);
// Или заменить -1 на IDCANCEL
, что угодно
Этот вызов, как вы, наверное, знаете, закроет диалог.
Обратите внимание, что главное диалоговое окно диалогового приложения выполняется в InitInstance (). Закрытие диалогового окна просто завершит работу InitInstance()
, который всегда возвращает FALSE
в таких проектах.