提高绘图效率以及避免闪屏 -- 双缓存,剪裁区

本文介绍了如何通过双缓存和剪裁区来提高窗口重绘效率,尤其是在使用GDI+进行复杂图形绘制时。通过获取并限制绘图在裁剪区内进行,减少不必要的计算。同时展示了在MFC中使用双缓存技术的实例,涉及内存DC、位图对象以及BitBlt函数的应用,以实现更流畅的图形显示效果。
摘要由CSDN通过智能技术生成

多数情况下窗口重绘的产生大多是因为窗口部分被遮挡或者窗口有滚动发生,改变的区域并不是整个图形而只有一小部分,这一部分需要改变的就是pDC中的裁剪区了。因为显示(往内存或者显存都叫显示)比绘图过程的计算要费时得多,有了裁剪区后显示的就只是应该显示的部分,大大提高了显示效率。但是这个裁剪区是MFC设置的,它已经为我们提高了显示效率,在进行复杂图形的绘制时如何进一步提高效率呢?那就只有去掉在裁剪区外的绘图过程了。可以先用pDC->GetClipBox()得到裁剪区,然后在绘图时判断你的图形是否在这个区内,如果在就画,不在就不画。

以下是我编写的shape文件读写关于重绘部分的实例

void CShpviewView::OnDraw(CDC* pDC)
{
     CShpviewDoc* pDoc = GetDocument();
     ASSERT_VALID(pDoc);
 
     /*双缓存绘图*/
     CDC MemDC; //定义一个显示设备对象 
    CBitmap MemBitmap;  //定义一个位图对象 
     CRect rcClient; //客户区
     CRect rcClip;   //裁剪区
     pDC->GetClipBox(rcClip);   //得到整个无效区
     GetClientRect(&rcClient);  //得到客户区范围

 

     //建立与屏幕显示兼容的内存显示设备 
     MemDC.CreateCompatibleDC(pDC);
 
     //建立一个与屏幕显示兼容的空位图,用窗口的大小 
     MemBitmap.CreateCompatibleBitmap(pDC,rcClient.Width(),rcClien

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值