C++双缓冲技术收集

CImage实现双缓冲

一普通显示:现在的VC显示图片非常方便,远不是VC6.0那个年代的技术可比,而且支持多种格式的如JPG,PNG。

     CImage _img;

     初始化:

     _img.Load(L"map.png");

 

     显示:OnPaint事件中

     CRect rect;
     this->GetClientRect(&rect);
     HDC hdc=::GetDC(this->m_hWnd);
     _img.Draw(hdc,rect);

     几行代码就解决了。

二双缓冲显示:【因为是用了两个CImage实例,要不叫伪双缓冲吧,但实现方式确实是双缓冲,可以完成拼图显示等功能,当然防刷新闪烁是肯定有效的】

    当时查了一天的百度,基本没用,第二天起床前想到了一个办法,其实很简单。用Datch什么的分离位图,反而无效,咱百度谷歌都没找到相关资料,所以这也算原创了吧。

    CImage img0,img1;

    img0.Load("*.png");

    img1.Create(w,h,img0.GetBPP());
    HDC tmpdc=img1.GetDC();

 

    先将img0的内存中的图画到img1的DC上,再用img1.Draw到显示设备中。

    img0.StretchBlt(tmpdc,0,0,desw,desh,Scr.x,Scr.y,desw,desh);//将源图中RECT(scr.x,scr.y,desw,desh) 区域的图复制到目标区域。

    img1.Draw(pdc->m_hDC,r);//r是显示区域,pdc是显示设备。

---------------

1.构造函数
    CImage img;
    HBITMAP bitmap;
       
    img.Load(_T(".//res//TeaPlanter.jpg"));//背景位图
    m_nBitmapsize=CSize(img.GetWidth(),img.GetHeight());
    bitmap= img.Detach();
    TeaBitmap.Attach(bitmap);   
    MemDC.CreateCompatibleDC(NULL);
    BitmapDC.CreateCompatibleDC(NULL);
    pOldBitmap=BitmapDC.SelectObject(&TeaBitmap);//加载背景位图
2.OnDraw函数
    CRect rect;
    CBitmap bitmap;

    GetClientRect(&rect);
    bitmap.CreateCompatibleBitmap(pDC,m_nBitmapsize.cx,m_nBitmapsize.cy);//绘制彩色位图用pDC句柄
    //内存绘图
    MemDC.SelectObject(&bitmap);
    MemDC.BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&BitmapDC,rect.left,rect.top,SRCCOPY);//先在内存绘制背景位图
    DrawTeaData(&MemDC);//内存位图绘制
    //复制到窗口
    pDC->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&MemDC,rect.left,rect.top,SRCCOPY);
    bitmap.DeleteObject();
3.OnEraseBkgnd函数
    return true; //屏蔽视窗口背景刷新,返回true,
4.析构函数
    //释放CDC
    BitmapDC.SelectObject(pOldBitmap);
    MemDC.DeleteDC();   
    BitmapDC.DeleteDC();

 

 

 

    

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gCodeTop 格码拓普 老师

您的鼓励.我的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值