【旧资料整理】MFC--滚动视图窗口(CScrollView)使用双缓冲问题
2017-06-25 00:12
337 查看
资料时间:2009-12-02之前
分享时间:2009-12-02到百度空间,空间关闭,重新整理
双缓冲绘图能够有效的解决窗口刷新时闪动问题,实现方法在网上 能够很 容易找到.但是在继承CScrollView类的滚动窗口中单纯使用找到的方法就会发现一些问题,在我们拖动滚动条时,窗口显示的很乱,并没有重绘.
问题肯定是出在内存绘图上了.先介绍两个概念.
窗口:就是我们通过拖滚动条所能看到的整个窗口.它是有一部分不能被当前显示的.
视口:就是我们能直接看到的当前显示的窗口,它是窗口的一部分,肯定比窗口小一些.
双 缓冲绘图时,绘图用的到的坐标是是窗口的坐标,拷贝位图到目的DC时,也是从(0,0)开始拷贝的,把以我们创建位图大小就不能设为通过 GetClientRect()获得的视口大小,而要设为调用 SetScrollSizes(MM_TEXT,CSize(1280,800))时所设的窗口大小,.这样绘图就不会有问题.
这样绘的图比较大,为了加快绘图速度,我们可以调用CDC::GetClipBox()获得刷新区域,判断我们要绘的图在不在刷新区域,如果不在就可以不画,画了也不会显示.
当然也可以将兼容位图设为视口大小,但是在画图时要判断出视口内要画哪部分图形,还要计算出绘图的偏移量,使用起来也不太方便.
分享时间:2009-12-02到百度空间,空间关闭,重新整理
双缓冲绘图能够有效的解决窗口刷新时闪动问题,实现方法在网上 能够很 容易找到.但是在继承CScrollView类的滚动窗口中单纯使用找到的方法就会发现一些问题,在我们拖动滚动条时,窗口显示的很乱,并没有重绘.
问题肯定是出在内存绘图上了.先介绍两个概念.
窗口:就是我们通过拖滚动条所能看到的整个窗口.它是有一部分不能被当前显示的.
视口:就是我们能直接看到的当前显示的窗口,它是窗口的一部分,肯定比窗口小一些.
双 缓冲绘图时,绘图用的到的坐标是是窗口的坐标,拷贝位图到目的DC时,也是从(0,0)开始拷贝的,把以我们创建位图大小就不能设为通过 GetClientRect()获得的视口大小,而要设为调用 SetScrollSizes(MM_TEXT,CSize(1280,800))时所设的窗口大小,.这样绘图就不会有问题.
这样绘的图比较大,为了加快绘图速度,我们可以调用CDC::GetClipBox()获得刷新区域,判断我们要绘的图在不在刷新区域,如果不在就可以不画,画了也不会显示.
当然也可以将兼容位图设为视口大小,但是在画图时要判断出视口内要画哪部分图形,还要计算出绘图的偏移量,使用起来也不太方便.
相关文章推荐
- MFC--滚动视图窗口(CScrollView)使用双缓冲问题
- 滚动视图窗口(CScrollView)使用双缓冲问题
- MFC CScrollView 对大视图出现滚动条回滚问题的解决
- MFC中CRectTracker在CScrollView中使用时问题的解决办法
- MFC窗口滚动功能 CScrollView类
- [MFC]ScrollDemo程序:CScrollView滚动视图的应用
- MFC对话框当中使用View视图
- VC6 MFC中ClassView视图中无法显示某个类的问题
- MFC 滚动条 CSCROLLVIEW的使用
- VC6 MFC中ClassView视图中无法显示某个类的问题
- (MFC)Vs2010制作Visual Studio风格的停靠侧栏窗口(CDockablePane里嵌套FormView表单视图)
- MFC VIEW多窗口分割使用 和CHtml等等14.5.4
- irrlicht在mfc mdi窗口中使用的问题
- VC6 MFC中ClassView视图中无法显示某个类的问题
- VS2010 MFC中制作Visual Studio风格的停靠侧栏窗口(CDockablePane里嵌套FormView表单视图)
- [MFC] 使用CScrollView应该注意的地方
- (MFC)Vs2010打造Visual Studio风格的停靠侧栏窗口(CDockablePane里嵌套FormView表单视图)
- 在View视图类中使用CSplitterWnd来拆分视图窗口(不在CMainFrame类的虚函数OnCreateClient中拆分视图框架窗口)
- docablepane 可停靠窗口在使用过程中的问题小结 vc mfc
- MFC中使用线程创建窗口的问题