Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Вывод на CDC:проблема с мерцанием анимации !


Автор: Александр 11.9.2002, 18:26
Возникла ужасная проблема :

анимация рисуется так :

void CMainWindow::OnPaint()
{
 CPaintDC dc(this); // device context for painting

 //  грубо говоря переход на метод
 //нижний большой слой (дальний план )
 Bitmap1.PaintResourseBitmap(&dc,какой  либо Rect , какой либо Rect)
 //средний слой   (средний план )
 Bitmap2.PaintResourseBitmap(&dc,какой  либо Rect , какой либо Rect)
 //верхний слой ( ближний план )
 Bitmap3.PaintResourseBitmap(&dc,какой  либо Rect , какой либо Rect)

}

 //рисовалка BMP
 HRESULT MYBITMAP::PaintResourceBitmap(CDC *pDC, CRect *Rect,CRect * ShiftInto)
{
 BITMAP bmpInfo;
   GetBitmap(&bmpInfo);
       CDC dcMemory;
   dcMemory.CreateCompatibleDC(pDC);
               
   dcMemory.SelectObject(this);
         
       int nX = Rect->left+ShiftInto->left;
   int nY = Rect->top+ShiftInto->top;
       int szx,szy;

       szx=bmpInfo.bmWidth-ShiftInto->right-ShiftInto->left;
       szy=bmpInfo.bmHeight-ShiftInto->bottom-ShiftInto->top;

       pDC->BitBlt(nX,nY ,szx ,szy , &dcMemory, ShiftInto->left,
ShiftInto->top, SRCCOPY);

 retun S_OK;
}

 понятно , что при перерисовке слоев анимация будет мерцать .
 Необходимо проводить операции через tempDC ( временный буфер ) , а
 потом когда все выстроено переносить изображение на dc экрана .

 то есть

 tempDC.CreateCompartibleDC(&dc);

//нижний большой слой (дальний план )
 Bitmap1.PaintResourseBitmap(&tempDC,какой  либо Rect , какой либо Rect)
 //средний слой   (средний план )
 Bitmap2.PaintResourseBitmap(&tempDC,какой  либо Rect , какой либо Rect)
 //верхний слой ( ближний план )
 Bitmap3.PaintResourseBitmap(&tempDC,какой  либо Rect , какой либо Rect)


 а потом все содержимое tempDC перенести на экран.

 Как это сделать ?
 Если нужно , можно использовать другую структуру вывода бмп на dc.
 Если другую - то какую .

Если можно - киньте пожалуйста алгоритм вывода (если не затруднит ) , либо дайте совет .
Заранее спасибо , Александр .


mailto : [email protected]

Автор: merz 17.9.2002, 23:56
Смотри
virtual BOOL CreateCompatibleDC( CDC* pDC );
и
BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop );

Автор: Seregy 18.9.2002, 16:39
Насколько я понял, у тебя все правильно делается с точки зрения использования контекста памяти в качестве промежуточного буфера изображения и последукющего блиттинга.
Поэтому еще с помощью DirectDraw можно попробовать.
(Пиши на [email protected], вышлю пример)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)