| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > работа с производным классом |
| Автор: torero 17.10.2006, 18:57 |
| У меня простой пример для вопроса. Проект CProba на основе CView. В CProbaView::OnCreate ставлю операторы: CWnd* pWnd = new CWnd; pWnd->Create(_T("STATIC"), "Hi", WS_CHILD | WS_VISIBLE, CRect(0, 0, 20, 20), this, 1234); Получается маленькое окно, всё работает правильно. Но теперь при помощи ClassWizard создаю новый класс CProbaOkno произ- водный от CWnd, в нём пишу функцию Sozd() c теми же операторами: void CProbaOkno::Sozd() { CWnd* pWnd = new CWnd; pWnd->Create(_T("STATIC"), "Hi", WS_CHILD | WS_VISIBLE, CRect(0, 0, 20, 20), this, 1234); } А в CProbaView::OnCreate() прежние операторы удалил и пишу: CProbaOkno pok; pok.Sozd(); Получаю два сообщения: 1. Окно создаётся с ошибкой. 2. Обнаружена утечка памяти. В чём может быть причина? |
| Автор: xTr1m 18.10.2006, 08:50 | ||
ну утечка, скорее всего, тут
ты ведь выделил память, так сам ее и очищай насчет ошибки, так сказать не могу. Хоть на какой строчке ошибка вылетает? |
| Автор: Любитель 19.10.2006, 12:44 | ||
Не надо создавать Sozd. Перегрузи Create, если не хочешь много параметров - сделай один - CWnd* parent.
wnd добав как private-переменную типа CWnd в COkno |
| Автор: torero 20.10.2006, 19:56 |
| Переменные CProbaOkno pok и CWnd *parent завёл и сделал обращение в CProbaView::OnCreate { pok.Create(parent); } , но ошибка трансляции в вызове базового метода CWnd::Create(); 'Create' : function does not take 0 parameters пока не поставил все 6 параметров. После этого программа отработала, но окно не построила и дала сообщение на каждый Create : Warning: Window creation failed: GetLastError returns 0x00000000 Warning: Window creation failed: GetLastError returns 0x00000000 |