MFC双缓存,第一次调用OnDraw函数图片显示,之后一直不显示。
奉孝安在 2013-10-31 04:55:55 代码如下:
void CSupervisionView::OnDraw(CDC* pDC)
{
CSupervisionDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
CPoint ptCenter;
CRect rect,ellipseRect;
GetClientRect(rect);
TRACE("OnDraw..........\n");
ptCenter = rect.CenterPoint();
CDC dcMem; //用于缓冲作图的内存DC
CBitmap bmp; //内存中承载临时图象的位图
dcMem.CreateCompatibleDC(pDC); //依附窗口DC创建兼容内存DC
bmp.CreateCompatibleBitmap(&dcMem,rect.Width(),rect.Height());//创建兼容位图
dcMem.SelectObject(&bmp); //将位图选择进内存DC
dcMem.FillSolidRect(rect,pDC->GetBkColor());//按原来背景填充客户区,不然会是黑色
for(int i=20;i>0;i--) //在内存DC上做同样的同心圆图象
{
ellipseRect.SetRect(ptCenter,ptCenter);
ellipseRect.InflateRect(i*10,i*10);
dcMem.Ellipse(ellipseRect);
}
BOOL b=pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,SRCCOPY);//将内存DC上的图象拷贝到前台
dcMem.DeleteDC(); //删除DC
bmp.DeleteObject(); //删除位图
}
问题描述:启动程序,同心圆图像一闪然后就再也不出来了。
尝试结果:View::OnDraw()函数(BitBlt后图像显示)
----->App::InitInstance()中调用m_pMainWnd->UpdateWindow(); (调用完成之后图像消失)
----->View::OnDraw()函数(BitBlt后图像不显示)
反常处:在上述跟踪中,第一次的rect:0,611,0,1204
第二次及之后的rect:0,611,0,1187