我用MFC 框架,gdi画图, 已经使用了 双缓冲。下面是代码。
我用timer 没40ms 调用一次invalidate, 理想的情况下,横线是很平滑的从上往下移动。但现在的情况是 这个线一跳一跳的,不知道我哪里做错了,希望能得到帮助
int ss = 0 ;
void CSmoothTestView::OnDraw(CDC* pDC)
{
CSmoothTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: add draw code for native data here
CRect rcClient ;
GetClientRect(rcClient) ;
CBitmap bitmap ;
bitmap.CreateCompatibleBitmap(pDC, rcClient.Width(), rcClient.Height()) ;
CDC memScreenDC ;
CBitmap* pOldScreenBmp ;
memScreenDC.CreateCompatibleDC(pDC) ;
pOldScreenBmp = memScreenDC.SelectObject(&bitmap) ;
memScreenDC.FillSolidRect(0, 0, rcClient.Width(), rcClient.Height(), RGB(255, 255, 255)) ;
memScreenDC.MoveTo(0, ss) ;
memScreenDC.LineTo(rcClient.right, ss) ;
pDC->BitBlt(
0,
0,
rcClient.Width(),
rcClient.Height(),
&memScreenDC,
0,
0,
SRCCOPY
) ;
memScreenDC.SelectObject(pOldScreenBmp) ;
if ( ss > rcClient.bottom )
{
ss = 0 ;
}
ss += 2 ;
}