【旧资料整理】MFC--滚动视图窗口(CScrollView)使用双缓冲问题

资料时间:2009-12-02之前

分享时间:2009-12-02到百度空间,空间关闭,重新整理

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


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

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

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


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

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


当然也可以将兼容位图设为视口大小,但是在画图时要判断出视口内要画哪部分图形,还要计算出绘图的偏移量,使用起来也不太方便.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值