Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа с производным классом 
V
    Опции темы
torero
Дата 17.10.2006, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 177
Регистрация: 1.2.2006

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



    У меня простой пример для вопроса. Проект 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. Обнаружена утечка памяти.
    В чём может быть причина?

PM MAIL   Вверх
xTr1m
Дата 18.10.2006, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ну утечка, скорее всего, тут
Цитата

CWnd* pWnd = new CWnd;


ты ведь выделил память, так сам ее и очищай

насчет ошибки, так сказать не могу. Хоть на какой строчке ошибка вылетает? 
PM MAIL WWW ICQ   Вверх
Любитель
Дата 19.10.2006, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Не надо создавать Sozd. Перегрузи Create, если не хочешь много параметров - сделай один - CWnd* parent.
Код

void COkno::Create(CWnd* parent)
{
   CWnd::Create(...);
   wnd.Create(..., this, ...)
}

wnd добав как private-переменную типа CWnd в COkno


--------------------
PM MAIL ICQ Skype   Вверх
Earnest
Дата 20.10.2006, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(torero @  17.10.2006,  19:57 Найти цитируемый пост)
void CProbaOkno::Sozd()
{       CWnd* pWnd = new CWnd;
    pWnd->Create(_T("STATIC"), "Hi", WS_CHILD | WS_VISIBLE,
     CRect(0, 0, 20, 20), this, 1234);
}

Здесь "this" - это несуществующее окно. Отсюда и ошибка.

Добавлено @ 18:06 
Цитата(Любитель @  19.10.2006,  13:44 Найти цитируемый пост)
wnd добав как private-переменную типа CWnd в COkno 

Наверное, все же имелось в виду, что надо вставить контрол типа CProbaOkno во вью. Тогда нужно добавить переменную типа CProbaOkno в класс вью, а то создается, понимаешь, автоматическая переменная... она ведь сразу разрушится.

Это сообщение отредактировал(а) Earnest - 20.10.2006, 18:08


--------------------
...
PM   Вверх
torero
Дата 20.10.2006, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 177
Регистрация: 1.2.2006

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



  Переменные 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

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


 




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


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

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