双缓冲绘图能够有效的解决窗口刷新时闪动问题,实现方法在网上 能够很 容易找到.但是在继承CScrollView类的滚动窗口中单纯使用找到的方法就会发现一些问题,在我们拖动滚动条时,窗口显示的很乱,并没有重绘.
问题肯定是出在内存绘图上了.先介绍两个概念.
窗口:就是我们通过拖滚动条所能看到的整个窗口.它是有一部分不能被当前显示的.
视口:就是我们能直接看到的当前显示的窗口,它是窗口的一部分,肯定比窗口小一些.
双 缓冲绘图时,绘图用的到的坐标是是窗口的坐标,拷贝位图到目的DC时,也是从(0,0)开始拷贝的,把以我们创建位图大小就不能设为通过 GetClientRect()获得的视口大小,而要设为调用 SetScrollSizes(MM_TEXT,CSize(1280,800))时所设的窗口大小,.这样绘图就不会有问题.
这样绘的图比较大,为了加快绘图速度,我们可以调用CDC::GetClipBox()获得刷新区域,判断我们要绘的图在不在刷新区域,如果不在就可以不画,画了也不会显示.