Контексты, цвета и размеры битмапа - как свести???
От: avanti  
Дата: 16.09.02 22:49
Оценка:
Боготворимые виртуозы! Помогите великодушно...А не то
все к чертям побью (

Есть прога, главная цель которой рисовать произвольные графики,
причем несколько в одно окно и желательно разным цветом. Я создаю
контекст в памяти, и рисую на него, затем копируем битовй массив и т.п.
— стандартная техника. Конечно, график может требовать для отображения
большего пространства, чем окно — решаем через введение скроллеров, и
прокручиваем, как желаем...Но! Если создаваемый для отображения
в контексте памяти Bitmap имеет размеры, больше неких мистических значений,
то :
если вызов такой
memBmp->CreateCompatibleBitmap(&memDC,MAXHORIZONTAL,MAXVERTICAL);

то все отлично, график рисуется но только черно/белая палитра!!!
а если такой
memBmp->CreateCompatibleBitmap(this->GetDC(),MAXHORIZONTAL,MAXVERTICAL);
то последующее
memDC.GetCurrentBitmap()->DeleteObject();
memDC.SelectObject(memBmp); ->возвращает NULL, и не зацепляет сей битмап,
отказываясь с ним работать!
И это при том, что этот же вызов при ином(малом) значении MAXHORIZONTAL отрабатывает
и все рисуется в цвете! <).
Начальная инициализация такая:
memDC.CreateCompatibleDC(this->GetDC());

memBmp = NULL;
memBmp = new CBitmap();
memBmp->CreateCompatibleBitmap(this->GetDC(),1,1);

Трабловый фрагмент:
memBmp->DeleteObject();
delete memBmp;
SetScrollPos(SB_VERT,0,true);
SetScrollPos(SB_HORZ,0,true);

memBmp = new CBitmap();

//memBmp->CreateCompatibleBitmap(&memDC,MAXHORIZONTAL,MAXVERTICAL);
memBmp->CreateCompatibleBitmap(this->GetDC(),MAXHORIZONTAL,MAXVERTICAL);

memDC.GetCurrentBitmap()->DeleteObject();
memDC.SelectObject(memBmp);

aRect.left=0; aRect.top=0;
aRect.right=MAXHORIZONTAL; aRect.bottom=MAXVERTICAL;
memDC.FillRect(&aRect,this->GetDC()->GetCurrentBrush());

Ведь задача наверняка типовая, и решается! Я уже двое суток во все дыры с ней
размножаюсь!Доки, книги прочитаны — ответа не вижу...мистику-исключаю.Помогите ПЛИЗ!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.