您的位置:首页 > 其它

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

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

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

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

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

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

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

当然也可以将兼容位图设为视口大小,但是在画图时要判断出视口内要画哪部分图形,还要计算出绘图的偏移量,使用起来也不太方便.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: