Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > 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], вышлю пример) |