其实问题很简单,而且下面代码也不复杂,你看下去吧!为了解决复杂图形在变化时不产生闪动,我做了下面代码的实验,想象应该得到黑底红画,但是没有!:(
谁能帮我看一下!
void CTestView::OnPaint() 
{
CPaintDC dc(this); // device context for painting
CDC dctest;
dctest.CreateCompatibleDC(&dc); CRect rc;
GetClientRect(&rc);                  CBitmap bmpMem;
bmpMem.CreateCompatibleBitmap(&dctest,rc.right,rc.bottom);

CBitmap *pOldBmp = dctest.SelectObject(&bmpMem);
                 //上面是创建与显示设备dc以及内存dctest的过程 OnDraw(&dctest);//将创建的dctest做为参数传给ondraw函数

dc.BitBlt(0,0,rc.right,rc.bottom,&dctest,0,0,SRCCOPY);//将经过ondraw处理过的dctest拷贝到屏幕上

dctest.SelectObject(pOldBmp);
dctest.DeleteDC();
bmpMem.DeleteObject();
}
void CTestView::OnDraw(CDC* pDC)
{
CTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

CRect rc;
GetClientRect(&rc);
CBrush  brush(RGB(0,0,0));//创建黑色的刷子
pDC->FillRect(&rc,&brush);//刷成黑色的背景

CPen mypen(PS_SOLID,0,RGB(255,0,0));//创建红色的画笔
CPen*oldp=pDC->SelectObject(&mypen); for(int i=0;i<100000;i++){
pDC->LineTo(0,i*3);
pDC->MoveTo(1000,i*2);
}//画图过程,时间有点长,不会说变态吧:)

pDC->SelectObject(oldp);
}BOOL CTestView::OnEraseBkgnd(CDC* pDC) 
{
return TRUE;//去掉MFC提供的背景绘制过程,使图象在运动时不闪
}