Ответ 1
В 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
в таких проектах.