双缓冲技术成熟版!绘那个项目图,无闪烁

来源:互联网 发布:淘宝联盟卖家平台 编辑:程序博客网 时间:2024/04/30 11:34

在Onpaint函数中添加: 

CDC *pDC=GetDC();
  
  CPoint ptCenter;
  
  CRect rect,ellipseRect;
  
  GetClientRect(&rect);
  
  ptCenter = rect.CenterPoint();
  
  CDC dcMem;                                                  //用于缓冲作图的内存DC
  
  CBitmap bmp;                                                 //内存中承载临时图象的位图
  
  dcMem.CreateCompatibleDC(pDC);               //依附窗口DC创建兼容内存DC
  
  bmp.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());//创建兼容位图
  
  dcMem.SelectObject(&bmp);                          //将位图选择进内存DC
  
  dcMem.FillSolidRect(&rect,RGB(255,0,0));//设置背景颜色 
 /* for(int i=20;i>0;i--)                                          //在内存DC上做同样的同心圆图象
   
  {
   
   ellipseRect.SetRect(ptCenter,ptCenter);
   
   ellipseRect.InflateRect(i*10,i*10);
   
   dcMem.Ellipse(ellipseRect);
   
  }*/
 // CDC* pDC=GetDC();
  CPen pen,*pOldPen;
  
  pen.CreatePen(PS_SOLID,7,RGB(255,0,0));
  pOldPen=dcMem.SelectObject(&pen);
     dcMem.Ellipse(400,100,600,300);//画圆
  dcMem.Rectangle(470,170,530,230);//圆里的小正方形
  dcMem.Rectangle(50,100,380,300);//显示区域的大正方形
  dcMem.Rectangle(80,120,350,280);//显示区域的小正方形
  
  dcMem.MoveTo(470,230);
  dcMem.LineTo(400,300);
  
  dcMem.MoveTo(400,100);
     dcMem.LineTo(470,170);
  
     dcMem.MoveTo(600,100);
  dcMem.LineTo(530,170);
  
  dcMem.MoveTo(600,300);
  dcMem.LineTo(530,230);
  dcMem.SetBkMode(TRANSPARENT);
  dcMem.TextOut(485,130,"UP");

     dcMem.TextOut(475,250,"DOWN");

     dcMem.TextOut(430,200,"C");

  dcMem.TextOut(550,200,"OK");
 
  
  
        dcMem.SelectObject(pOldPen);
 
  pen.DeleteObject();
   
 
  
  pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,SRCCOPY);//将内存DC上的图象拷贝到前台
  
  dcMem.DeleteDC();                                       //删除DC
  
  bmp.DeleteObject();                                        //删除位图
  
  
 
 }

 

其他的就是添加onbkgnd函数吗,并将内容修改为 return true;

原创粉丝点击