双缓冲画图

1.用CreateCompatibleDC创建与目标窗口兼容的内存DC
 
2.把一个位图选进内存DC
 
3.在内存的位图上画图
4.用BitBlt把内存DC中的像素画到屏幕上的目标窗口
CreateCompatibleDC创建的时候,会默认把一个一个像素长一个像素宽的单色位图选进去,绘图之前,必须先创建一个位图(指定合适的长宽),然后选进内存DC。所有在内存DC上的作图都是在内存DC的位图上的作图。
void CBlat2View::OnDraw(CDC* pDC)

{

   CBlat2Doc* pDoc = GetDocument();

   ASSERT_VALID(pDoc);



   // load IDB_BITMAP1 from our resources

   CBitmap bmp;

   if (bmp.LoadBitmap(IDB_BITMAP1))

   {

      // Get the size of the bitmap

      BITMAP bmpInfo;

      bmp.GetBitmap(&bmpInfo);



      // Create an in-memory DC compatible with the

      // display DC we're using to paint

      CDC dcMemory;

      dcMemory.CreateCompatibleDC(pDC);



      // Select the bitmap into the in-memory DC

      CBitmap* pOldBitmap = dcMemory.SelectObject(&bmp);



      // Find a centerpoint for the bitmap in the client area

      CRect rect;

      GetClientRect(&rect);

      int nX = rect.left + (rect.Width() - bmpInfo.bmWidth) / 2;

      int nY = rect.top + (rect.Height() - bmpInfo.bmHeight) / 2;



      // Copy the bits from the in-memory DC into the on-

      // screen DC to actually do the painting. Use the centerpoint

      // we computed for the target offset.

      pDC->BitBlt(nX, nY, bmpInfo.bmWidth, bmpInfo.bmHeight, &dcMemory, 

         0, 0, SRCCOPY);



      dcMemory.SelectObject(pOldBitmap);

   }

   else

      TRACE0("ERROR: Where's IDB_BITMAP1? ");

}
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值