![]() |
|
|
![]()
|
|
| Fobos |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 9.2.2008 Где: Москва Репутация: нет Всего: нет |
Пишу в основном на шарпе, если на C++ приходится, то в основном встречаюсь с функциональным программированием, а тут надо написать прогу в MFC и что-то меня заклинило. Задача такая: в приложении надо работать с сетью, у меня возник вопрос когда очищать ресурсы - сокет и библиотеку WSAStartup. Проблема проявляется как бы в двух ипостасях:
Первая: в шарпе я мог перехватить событие OnClose окна и я точно знал, что когда окно будет закрываться - неважно как, я его перехвачу и смогу что-то обработать и дальше оно закроется. В MFC я не смог найти такой обработчик который бы позволил мне всегда выполнять очищающий код. Попробовал сначала ловить OnClose() - получалось что я перехватывал управление только при нажатии крестика в правом углу диалога, а при нажатии кнопок OK и CANCEL не перехватывал. Т.е. получается надо перехватывать еще и их, OnOk() и OnCancel() и вызывать один и тот же код. Вторая: Решил тогда так: инициализировать библиотеку бууд в конструкторе окна, а очищать в деструкторе чтобы всегда и в одном месте очищать, а не по трем обработчикам, но задумался. В коде класса диалога я деструктор не нашел, но не может ли MFC генерировать за меня деструктор диалога и там очищать какие-нибудь ресурсы окна? Тогда если я определю свой деструктор, то мне надо очистить помимо своих еще и ресурсы окна, но я не знаю какие и могу накосячить. Итого два вопроса: 1. Какой обработчик нужно вызывать чтобы он всегда вызывался при закрытии окна. 2. Генерирует ли MFC за меня деструктор класса окна диалога и если да, то как бы мне и свою очистку выполнить и то что там система генерирует сделать. P.S. Ну и буду признателен за предложения по организации проги: когда лучше инициализировать сокеты и когда освободить. |
|||
|
||||
| 13dreams |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 1.7.2010 Репутация: нет Всего: нет |
ON_WM_DESTROY() должно работать при любом завершении диалога
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Во-первых, ты не можешь "переопределить" деструктор - только дополнить, ибо базовый вызывается всегда.
Можно делать очистку и на деструкторе, но смотря какую. Важно понимать, что деструктор - это разрушение объекта, а не окна. Окно может быть убито и задолго до попадания в деструктор. Во-вторых, как сказал 13dreams, лови WM_DESTROY, это сообщение приходит всегда, если окно связано с MFC-объектом. -------------------- ... |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |