Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

завершение работы

2.6K
24 ноября 2004 года
kupyxa
35 / / 20.10.2004
Наверное, глупый вопрос...
Есть приложение: обычное окно, в котором большая кнопка "EXIT". Так вот, как сделать, чтобы при нажатии на нее, происходило корректное завершение работы. Если ставлю PostQuitMessage, работа завершается, но не вызывается деструктор окна :(
Если же ставлю DestroyWindow, окно уничтожается, деструктор вызывается, но приложение по-прежнему работает :(
301
24 ноября 2004 года
lord Kelvin
897 / / 08.11.2004
Цитата:
Originally posted by kupyxa
Наверное, глупый вопрос...
Есть приложение: обычное окно, в котором большая кнопка "EXIT". Так вот, как сделать, чтобы при нажатии на нее, происходило корректное завершение работы. Если ставлю PostQuitMessage, работа завершается, но не вызывается деструктор окна :(
Если же ставлю DestroyWindow, окно уничтожается, деструктор вызывается, но приложение по-прежнему работает :(


Тебе просто нужно выйти из WinMain. Кажется все.=) Сделать это можно с помощью глобальной переменной (типа [COLOR=royalblue]bool ExitFromProgram=false;[/COLOR]). Решение, конечно, не самое красивое, но работает.

3
24 ноября 2004 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by lord Kelvin

Тебе просто нужно выйти из WinMain. Кажется все.=) Сделать это можно с помощью глобальной переменной (типа [COLOR=royalblue]bool ExitFromProgram=false;[/COLOR]). Решение, конечно, не самое красивое, но работает.



Не городите огород.
Все отлично завершается по WM_QUIT (PostQuitMessage).
Почему бы не указать на чем реализуешь: версия MFC/WTL, привести пример кода.

2.6K
24 ноября 2004 года
kupyxa
35 / / 20.10.2004
Цитата:
Originally posted by Green


Не городите огород.
Все отлично завершается по WM_QUIT (PostQuitMessage).
Почему бы не указать на чем реализуешь: версия MFC/WTL, привести пример кода.



Пример деструктора:
CMainWnd::~CMainWnd(){
SetCursorPos(0,0);
}

PostQuitMessage не работает - попробуй сам. В то же время, если вызвать DestroyWindow, курсор переместится, да только приложение продолжит работу :(

527
24 ноября 2004 года
pavor
275 / / 28.09.2003
Цитата:
Originally posted by kupyxa


Пример деструктора:
CMainWnd::~CMainWnd(){
SetCursorPos(0,0);
}

PostQuitMessage не работает - попробуй сам. В то же время, если вызвать DestroyWindow, курсор переместится, да только приложение продолжит работу :(


В обработчике WM_DESTROY напиши PostQuitMessage

3
25 ноября 2004 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by kupyxa


Пример деструктора:
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.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог