завершение работы
Есть приложение: обычное окно, в котором большая кнопка "EXIT". Так вот, как сделать, чтобы при нажатии на нее, происходило корректное завершение работы. Если ставлю PostQuitMessage, работа завершается, но не вызывается деструктор окна :(
Если же ставлю DestroyWindow, окно уничтожается, деструктор вызывается, но приложение по-прежнему работает :(
Наверное, глупый вопрос...
Есть приложение: обычное окно, в котором большая кнопка "EXIT". Так вот, как сделать, чтобы при нажатии на нее, происходило корректное завершение работы. Если ставлю PostQuitMessage, работа завершается, но не вызывается деструктор окна :(
Если же ставлю DestroyWindow, окно уничтожается, деструктор вызывается, но приложение по-прежнему работает :(
Тебе просто нужно выйти из WinMain. Кажется все.=) Сделать это можно с помощью глобальной переменной (типа [COLOR=royalblue]bool ExitFromProgram=false;[/COLOR]). Решение, конечно, не самое красивое, но работает.
Тебе просто нужно выйти из WinMain. Кажется все.=) Сделать это можно с помощью глобальной переменной (типа [COLOR=royalblue]bool ExitFromProgram=false;[/COLOR]). Решение, конечно, не самое красивое, но работает.
Не городите огород.
Все отлично завершается по WM_QUIT (PostQuitMessage).
Почему бы не указать на чем реализуешь: версия MFC/WTL, привести пример кода.
Не городите огород.
Все отлично завершается по WM_QUIT (PostQuitMessage).
Почему бы не указать на чем реализуешь: версия MFC/WTL, привести пример кода.
Пример деструктора:
CMainWnd::~CMainWnd(){
SetCursorPos(0,0);
}
PostQuitMessage не работает - попробуй сам. В то же время, если вызвать DestroyWindow, курсор переместится, да только приложение продолжит работу :(
Пример деструктора:
CMainWnd::~CMainWnd(){
SetCursorPos(0,0);
}
PostQuitMessage не работает - попробуй сам. В то же время, если вызвать DestroyWindow, курсор переместится, да только приложение продолжит работу :(
В обработчике WM_DESTROY напиши PostQuitMessage
Пример деструктора:
CMainWnd::~CMainWnd(){
SetCursorPos(0,0);
}
PostQuitMessage не работает - попробуй сам. В то же время, если вызвать DestroyWindow, курсор переместится, да только приложение продолжит работу :(
Я не говорил бы если бы сам не проверил.
Давай рассудим логически:
1. Что делает PostQuitMessage? Ставит в очередь WM_QUIT.
2. Что происходит когда стандартный цикл обработки сообщений получает WM_QUIT? Завершается.
3. Что происходит послезавершения цикла обработки сообщений? Обычно цикл последний в глобальной функции WinMain, поэтому после выхода из цикла она тоже обычно завершается.
4. Что происходит при завершении функции WinMain? Происходит унитожение всех локальных объектов. Т.к. это главная функция в приложении, то завершается и все приложение с удалением всех глобальных объектов.
Теперь по твоему коду. Код, конечно, содержательный :D
но это не то, что хотелось бы увидеть.
Если ты используешь MFC, то какую его версию?
Дело в том, что раньше, на сколько помню,WM_QUIT вызывало TerminateProcess, - одна из нелепостей MFC. Потом это место кажется изменили.
Отследи процесс обработки WM_QUIT.