Re: Problem with refreshing animated bitmap
On Sun, 03 Jun 2007 15:54:56 -0000, frd <simon.katanski@gmail.com>
wrote:
I'd probably use some graphical api instead of GDI, but I dunno them.
I've written just a simple test code, and it has neither flicker nor
other ugly graphical effect.
<CODE>
void CTestAnim2DView::OnDraw(CDC* pDC)
{
// Double buffering with memory DC
// http://www.codeproject.com/gdi/flickerfree.asp
CMemDC dc(pDC);
CRect bounds;
GetClientRect(&bounds);
//
// Clear back-buffer
//
CBrush blueBrush( RGB(0, 0, 255) );
CBrush * pOldBrush = dc.SelectObject( &blueBrush );
dc.Rectangle( bounds );
dc.SelectObject( pOldBrush );
pOldBrush = NULL;
//
// Draw the bitmap
//
CDC bitmapDC;
VERIFY( bitmapDC.CreateCompatibleDC( &dc ) );
CBitmap * pOldBitmap = bitmapDC.SelectObject( &( m_sprite.Bmp ) );
dc.BitBlt( m_sprite.X, m_sprite.Y, bounds.Width(),
bounds.Height(), &bitmapDC, 0, 0, SRCCOPY );
bitmapDC.SelectObject( pOldBitmap );
pOldBitmap = NULL;
}
</CODE>
m_sprite is just an instance of a simple struct like this:
struct Sprite
{
CBitmap Bmp;
int X;
int Y;
Sprite()
: X(0), Y(0)
{
}
};
I have a timer and when timer ticks I update position and call
Invalidate().
MrAsm