什么是双缓存画图机制啊?VC绘图中的
急急急!!!哪位高手知道什么是双缓存画图机制啊?VC绘图中的,可否举例示之,谢
我做的是一个可以动的物体(用计时器),按你的方法做了,屏幕还是闪烁,我把OnDraw()和OnTimer()的程序贴在这,你再帮我看看吧,谢谢啦
void CMyView::OnDraw(CDC* pDC)
{
CMyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CDC MemDC;
CBitmap MemBitmap
CRect rc;
GetClientRect(&rc);
MemDC.CreateCompatibleDC(pDC);
MemBitmap.CreateCompatibleBitmap(pDC,rc.Width(),rc.Height());
CBitmap *pOldBmp=MemDC.SelectObject(&MemBitmap);
MemDC.FillSolidRect(0,0,rc.Width(),rc.Height(),RGB(190,232,235));
COLORREF rgb1=RGB(0,0,255);
CBrush brush,brush1,brush2;
brush.CreateSolidBrush(rgb1);
MemDC.SelectObject(brush);
MemDC.Rectangle(ptx,pty,ptx+100,pty+50);
brush1.CreateSolidBrush(rgb);
MemDC.SelectObject(brush1);
MemDC.Ellipse(ptx+80,pty,ptx+100,pty+20);
MemDC.SelectStockObject(BLACK_BRUSH);
MemDC.Ellipse(ptx+10,pty+35,ptx+40,pty+65);
MemDC.Ellipse(ptx+60,pty+35,ptx+90,pty+65);
pDC->BitBlt(0,0,rc.Width(),rc.Height(),&MemDC,0,0,SRCCOPY);
MemBitmap.DeleteObject();
MemDC.DeleteDC();
pDC->TextOut(0,0,"红灯停,绿灯行,每隔2秒红绿灯变化一次");
}
void CMyView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if(nIDEvent==1)
{
count+=1;
}
if(count<=40)
{
if(flag)
{
rgb=RGB(0,255,0);
ptx+=5;
Invalidate(true);
}
}
else
{
rgb=RGB(255,0,0);
Invalidate(true);
count=0;
flag=!flag;
}
CScrollView::OnTimer(nIDEvent);
}
[ 本帖最后由 myvc 于 2010-4-3 16:18 编辑 ]