16,472
社区成员
发帖
与我相关
我的任务
分享
HPEN _hPen = (HPEN)::CreatePen(PS_SOLID,1,RGB(255,0,0));
HPEN _hOPen = (HPEN)::SelectObject(pDC->m_hDC,_hPen);
CPoint ptCenter;
CRect rect,ellipseRect;
GetClientRect(&rect);
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());//按原来背景填充客户区,不然会是黑色
HPEN _hOPen1 = (HPEN)::SelectObject(dcMem.m_hDC,_hPen);
for(int i=2000;i>0;i--) //在内存DC上做同样的同心圆图象
{
ellipseRect.SetRect(ptCenter,ptCenter);
ellipseRect.InflateRect(i*10,i*10);
dcMem.Ellipse(ellipseRect);
}
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,SRCCOPY);//将内存DC上的图象拷贝到前台
::SelectObject(dcMem.m_hDC,_hOPen1);
::SelectObject(pDC->m_hDC,_hOPen);
::DeleteObject(_hPen);
dcMem.DeleteDC(); //删除DC
bmp.DeleteObject();