WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Сьедаются ресурсы,help (CGI objects)

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Сьедаются ресурсы,help (CGI objects)
MADbI4 опубликован 01-05-2001 16:23 MSK   Click Here to See the Profile for MADbI4   Click Here to Email MADbI4  
Люди добры подскажите, вот сделал чтоб отображалась красивая шкала
показывая скорость соединения.
Но в ней присутствует утечка памяти, я грешу на кисть
Так как при отключении уничтожения -создавания разноцветных кистей
утечка прикращается.
Делаю я так
1. CBrush br; Создаю обьект
2. br.CreateSolidBrush(RGB(224,227,228)); создаю кисть опред. цвета
3. ...Пользуюсь
4. br.DeleteObject(); Удаляю кисть чтобы еа ее основе создать новую
далее на наг 2.
Подскажите что не так.

вот функция где применяется этот код.

void <какойто класс>::_DrawDiagram(CDC *dc, int pos, int left, int top)
{//Параметры где рисовать(CDC),значение графы(макс 10),поз. слева, поз справа
CRect rc2;//Размеры
CBrush br;//Кисть , на нее все подозрения
br.CreateSolidBrush(RGB(224,227,228));
//кисть для заливкм фона ограничевающего прямоугольника (серо-фиолет)
CBrush *pBr=dc->SelectObject(&br);
//Выбираю свою кисть ,сохраняя дескр. на старую
rc2.left =left;//10;
rc2.right =left+4;//14;
rc2.top =top;//10;
rc2.bottom =top+9;//19;
//Задаю координаты
dc->Rectangle(left-2,top-2,left+51,top+11);
//Обрамляющий прямоугольник
for(int i=0;i<pos;i++)
{//В цикле рисую столько полосок скока передано в pos
br.DeleteObject();
//Уничтожаю свою кисть чтобы создать новую др. цвета
if(i<=5)
{//Выбираю цвет заполнение
//До 5 с красного до желтого
br.CreateSolidBrush(RGB(255,(i*51),0));
}else
{//После 5 с жёлтого до зеленого
br.CreateSolidBrush(RGB(255-(i*51),255,0));
}
dc->SelectObject(&br);
//Выбираю созданую кисть и рисую ей прямоуголники (шкалу)
dc->Rectangle(rc2);
rc2.left +=5;
rc2.right +=5;
//Передвигаюсь на след поз. и рисую след прямоуголник
}
dc->SelectObject(pBr);
//Выход из цикла выбираю кисть ранее сохраненую,выход
}

Kosha опубликован 02-05-2001 04:12 MSK     Click Here to See the Profile for Kosha  Click Here to Email Kosha     
Точно не уверен, но попробуй перед

br.DeleteObject();
//Уничтожаю свою кисть чтобы создать новую др. цвета

заселектить старую кисть, т.е. pBr

MADbI4 опубликован 02-05-2001 10:42 MSK     Click Here to See the Profile for MADbI4  Click Here to Email MADbI4     
Коша спасибо,именно этот оператор я и пропустил.
А так как рисование вызывалось часто (список с OWNERDRAW) ресурсы поедались очень быстро.
Если кому нада много-кратно использовать графический обьект вот ПРАВИЛЬНЫЙ синтаксис:
1. CBrush *pbr,br;
2. br.CreateSolidBrush(Какойлибо цвет);
3. pBr=dc.Selectobject(&br);
4. ...Рисуем новой кистью
5. dc.Selectobject(pBr);
6. br.DeleteObject();
Идем на шаг 2
Также подобный "алгоритм" можно применять и к другим граф. обьектам, таким как
CPen,CBrush,CFont,CBitmap итк.

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.