static int i=1;
CDC *pdc=GetDC();
CPen npen,*oldpen;
npen.CreatePen(PS_SOLID,4,RGB(0,255,0));
oldpen=pdc->SelectObject(&npen);
CClientDC dc(this);
CBrush brush,*oldbrush;
brush.CreateSolidBrush(RGB(0,0,0));
oldbrush=dc.SelectObject(&brush);
dc.Ellipse(295-i,295,305-i,305);
dc.SetROP2(R2_XORPEN);
dc.SelectObject(oldbrush);
CRect   rc(195,195,305,305);
InvalidateRect(rc);
i++;
pdc->SelectObject(oldpen);我在定时器中想动态显示我自己画的圆,但是运行以后自己画的圆会出现闪烁,好像双缓冲的方法可以解决,但是网上那些都是解决位图的方法,我是个新手,求各位高手指点一下   谢谢

解决方案 »

  1.   

    简单点说就是创建一个内存位图,在位图中绘制,然后将位图回帖到屏幕,主要用到如下几个步骤:1.创建内存位图
    ::GetClientRect(m_hWnd,&clientRect);
    hMemDC = ::CreateCompatibleDC(hCurrentDC);
    m_hMemBmp = ::CreateCompatibleBitmap(hCurrentDC,clientRect.right,clientRect.bottom);
    m_hOldMemBmp = (HBITMAP)::SelectObject(hMemDC,m_hMemBmp);2.在hMemDC 中绘制(略)
    ....3.
    ::BitBlt(hCurrentDC,0,0,clientRect.right,clientRect.bottom,hMemDC,0,0,SRCCOPY);
      

  2.   

    双缓存思路 : 先把所有内容写到一个内存dc,然后一次把dc拷贝到屏幕显示。