Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переопределение деструктора CDialog, К чему приведет переопределение деструкт 
:(
    Опции темы
Fobos
Дата 12.8.2010, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 9.2.2008
Где: Москва

Репутация: нет
Всего: нет



Пишу в основном на шарпе, если на C++ приходится, то в основном встречаюсь с функциональным программированием, а тут надо написать прогу в MFC и что-то меня заклинило. Задача такая: в приложении надо работать с сетью, у меня возник вопрос когда очищать ресурсы - сокет и библиотеку WSAStartup. Проблема проявляется как бы в двух ипостасях:
Первая: в шарпе я мог перехватить событие OnClose окна и я точно знал, что когда окно будет закрываться - неважно как, я его перехвачу и смогу что-то обработать и дальше оно закроется. В MFC я не смог найти такой обработчик который бы позволил мне всегда выполнять очищающий код. Попробовал сначала ловить OnClose() - получалось что я перехватывал управление только при нажатии крестика в правом углу диалога, а при нажатии кнопок OK и CANCEL не перехватывал. Т.е. получается надо перехватывать еще и их, OnOk() и  OnCancel() и вызывать один и тот же код.
Вторая: Решил тогда так: инициализировать библиотеку бууд в конструкторе окна, а очищать в деструкторе чтобы всегда и в одном месте очищать, а не по трем обработчикам, но задумался. В коде класса диалога я деструктор не нашел, но не может ли MFC генерировать за меня деструктор диалога и там очищать какие-нибудь ресурсы окна? Тогда если я определю свой деструктор, то мне надо очистить помимо своих еще и ресурсы окна,  но я не знаю какие и могу накосячить.
Итого два вопроса: 
1. Какой обработчик нужно вызывать чтобы он всегда вызывался при закрытии окна.
2. Генерирует ли MFC за меня деструктор класса окна диалога и если да, то как бы мне и свою очистку выполнить и то что там система генерирует сделать.
P.S. Ну и буду признателен за предложения по организации проги: когда лучше инициализировать сокеты и когда освободить.

PM MAIL ICQ   Вверх
13dreams
Дата 13.8.2010, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 1.7.2010

Репутация: нет
Всего: нет



ON_WM_DESTROY()  должно работать при любом завершении диалога
PM MAIL   Вверх
Earnest
Дата 13.8.2010, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Во-первых, ты не можешь "переопределить" деструктор - только дополнить, ибо базовый вызывается всегда. 
Можно делать очистку и на деструкторе, но смотря какую. Важно понимать, что деструктор - это разрушение объекта, а не окна. Окно может быть убито и задолго до попадания в деструктор.
Во-вторых, как сказал 13dreams, лови WM_DESTROY, это сообщение приходит всегда, если окно связано с MFC-объектом. 


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0409 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.