Двойная буферизация
От: Mailin  
Дата: 08.11.04 16:39
Оценка:
Почему у меня фон дочернего окна становится черным после применения этого кода:
RECT Rect;
GetClientRect(&Rect);
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CBitmap MemBitmap;
MemBitmap.CreateCompatibleBitmap(pDC,Rect.right,Rect.bottom);
CBitmap *pOldBitmap=MemDC.SelectObject(&MemBitmap);
...............
//тут я рисую....
...............
pDC->BitBlt(0,0,Rect.right,Rect.bottom,&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(pOldBitmap);
MemBitmap.DeleteObject();
MemDC.DeleteDC();

Может я чего не дописываю?Подскажите пожалуйста...
Красота СТРАШНАЯ сила
Re: Двойная буферизация
От: MicVit  
Дата: 08.11.04 16:59
Оценка:
Здравствуйте, Mailin, Вы писали:

M>Почему у меня фон дочернего окна становится черным после применения этого кода:

M>
M>RECT Rect;
M>GetClientRect(&Rect);
M>CDC MemDC;
M>MemDC.CreateCompatibleDC(pDC);



MemDC.SetMapMode(MM_TEXT);        // возможно, не помешает
MemDC.SetBkMode(TRANSPARENT);     // может этого не хватает ?



M>CBitmap MemBitmap;
M>MemBitmap.CreateCompatibleBitmap(pDC,Rect.right,Rect.bottom);
M>CBitmap *pOldBitmap=MemDC.SelectObject(&MemBitmap);
M>...............
M>//тут я рисую....
M>...............
pDC->>BitBlt(0,0,Rect.right,Rect.bottom,&MemDC,0,0,SRCCOPY);
M>MemDC.SelectObject(pOldBitmap);
M>MemBitmap.DeleteObject();
M>MemDC.DeleteDC();
M>

M>Может я чего не дописываю?Подскажите пожалуйста...
Re: Двойная буферизация
От: Аноним  
Дата: 08.11.04 20:59
Оценка:
Здравствуйте, Mailin, Вы писали:

M>Почему у меня фон дочернего окна становится черным после применения этого кода:

M>
M>RECT Rect;
M>GetClientRect(&Rect);
M>CDC MemDC;
M>MemDC.CreateCompatibleDC(pDC);
M>CBitmap MemBitmap;
M>MemBitmap.CreateCompatibleBitmap(pDC,Rect.right,Rect.bottom);
M>CBitmap *pOldBitmap=MemDC.SelectObject(&MemBitmap);
M>...............
M>//тут я рисую....
M>...............
pDC->>BitBlt(0,0,Rect.right,Rect.bottom,&MemDC,0,0,SRCCOPY);
M>MemDC.SelectObject(pOldBitmap);
M>MemBitmap.DeleteObject();
M>MemDC.DeleteDC();
M>

M>Может я чего не дописываю?Подскажите пожалуйста...

У Вас пустой (черный) MemDC после создания. Если Вы хотите сохранить предыдущее содержимое окна, скопируйте его из pDC.


CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CBitmap MemBitmap;
MemBitmap.CreateCompatibleBitmap(pDC,Rect.right,Rect.bottom);
CBitmap *pOldBitmap=MemDC.SelectObject(&MemBitmap);
MemDC.BitBlt(0,0,Rect.right,Rect.bottom,pDC,0,0,SRCCOPY);
...............
//тут я рисую....
...............
Re[2]: Двойная буферизация
От: Mailin  
Дата: 09.11.04 15:00
Оценка:
Здравствуйте, Аноним, Вы писали:
А>
А>CDC MemDC;
А>MemDC.CreateCompatibleDC(pDC);
А>CBitmap MemBitmap;
А>MemBitmap.CreateCompatibleBitmap(pDC,Rect.right,Rect.bottom);
А>CBitmap *pOldBitmap=MemDC.SelectObject(&MemBitmap);
А>MemDC.BitBlt(0,0,Rect.right,Rect.bottom,pDC,0,0,SRCCOPY);
А>...............
А>//тут я рисую....
А>...............
А>

Спасибо, помогло. Только далее проблемы возникли... Ничего не выводится У меня есть некая функция в которой записаны 4 массива координат newx[i],newy[i] newx1[i],newy1[i]. Если у меня нажата кнопка ОК на диалоге, то я вызываю перерисовку. Почему-то безрезультатно,конечно предыдущий код сожержится в OnDraw . Может я рисую не правильно?
for (i=0;i<p;i++)
{
     MemDC.MoveTo(newx[i],newy[i]);
    MemDC.LineTo(newx1[i],newy1[i]);
}

Подскажите плиз...
Красота СТРАШНАЯ сила
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.