![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Александр |
|
|||
Unregistered |
Возникла ужасная проблема :
анимация рисуется так : 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 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 18.4.2002 Репутация: нет Всего: нет |
Смотри
virtual BOOL CreateCompatibleDC( CDC* pDC ); и BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop ); |
|||
|
||||
Seregy |
|
|||
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 30.7.2002 Репутация: нет Всего: нет |
Насколько я понял, у тебя все правильно делается с точки зрения использования контекста памяти в качестве промежуточного буфера изображения и последукющего блиттинга.
Поэтому еще с помощью DirectDraw можно попробовать. (Пиши на [email protected], вышлю пример) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |