滚动视图窗口(CScrollView)使用双缓冲问题

GUI 专栏收录该内容
27 篇文章 0 订阅


       双缓冲绘图能够有效的解决窗口刷新时闪动问题,实现方法在网上 能够很 容易找到.但是在继承CScrollView类的滚动窗口中单纯使用找到的方法就会发现一些问题,在我们拖动滚动条时,窗口显示的很乱,并没有重绘.


问题肯定是出在内存绘图上了.先介绍两个概念.

窗口:就是我们通过拖滚动条所能看到的整个窗口.它是有一部分不能被当前显示的.

视口:就是我们能直接看到的当前显示的窗口,它是窗口的一部分,肯定比窗口小一些.


双 缓冲绘图时,绘图用的到的坐标是是窗口的坐标,拷贝位图到目的DC时,也是从(0,0)开始拷贝的,把以我们创建位图大小就不能设为通过 GetClientRect()获得的视口大小,而要设为调用 SetScrollSizes(MM_TEXT,CSize(1280,800))时所设的窗口大小,.这样绘图就不会有问题.

这样绘的图比较大,为了加快绘图速度,我们可以调用CDC::GetClipBox()获得刷新区域,判断我们要绘的图在不在刷新区域,如果不在就可以不画,画了也不会显示.


当然也可以将兼容位图设为视口大小,但是在画图时要判断出视口内要画哪部分图形,还要计算出绘图的偏移量,使用起来也不太方便
  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值