问题日记:对话框SCROLL滚动后重绘OnPaint的问题(空白,重复)的解决
2011-08-18 17:50
609 查看
今天不巧,要做个带SCROLL条的对话框,对话框OnPain函数上画图片。当移动Scroll时,图形被遮住后再一点点移回去时,图形就没有了,加UpdateWindow也不行。如果按滚动条空白处移回去的时候就会出现很多重复的。马勒戈壁,的,基础差,上网找了挺久的,到现在才解决(找到一篇极好的文章http://kb.cnblogs.com/a/1509414/ C#的,果断加入收藏夹)。下面把重点COPY上:
当我们拖动滚动条时,也会触发Paint事件,重新绘制工作区,但系统并不重新绘制整个工作区。例如当滚动条向下拖动50像素时,系统首先把工作区中的图像整体向上平移50像素,这时工作区下部出现一块大小为50像素的空白,系统只需补上这块空白区域即可,但绘制图形时并不知道滚动条的变化情况,默认情况下它总是以“工作区左上角”为原点绘制图形的,即它描点时的坐标总是参照“工作区左上角”的。形象地说就是,它总是把文档的左上角和工作区的左上角对齐,然后把文档贴在工作区上。于是出现不断重复的内容。
解决的方法就是,移动座标系,向上面的例子就要把座标系向上移动50像素,代码如下:
void CSeatScroll::OnPaint()
{
CPaintDC dc(this); // device context for painting
dc.SetViewportOrg( -GetScrollPos(SB_HORZ),-GetScrollPos(SB_VERT));
}
当我们拖动滚动条时,也会触发Paint事件,重新绘制工作区,但系统并不重新绘制整个工作区。例如当滚动条向下拖动50像素时,系统首先把工作区中的图像整体向上平移50像素,这时工作区下部出现一块大小为50像素的空白,系统只需补上这块空白区域即可,但绘制图形时并不知道滚动条的变化情况,默认情况下它总是以“工作区左上角”为原点绘制图形的,即它描点时的坐标总是参照“工作区左上角”的。形象地说就是,它总是把文档的左上角和工作区的左上角对齐,然后把文档贴在工作区上。于是出现不断重复的内容。
解决的方法就是,移动座标系,向上面的例子就要把座标系向上移动50像素,代码如下:
void CSeatScroll::OnPaint()
{
CPaintDC dc(this); // device context for painting
dc.SetViewportOrg( -GetScrollPos(SB_HORZ),-GetScrollPos(SB_VERT));
}
相关文章推荐
- universal image loader在listview/gridview中滚动时重复加载图片的问题及解决方法
- FragmentTabHost切换Fragment时避免重复加载UI,导致切换后重绘页面的问题解决
- Scroll滚动空白条问题
- ListView 显示柱状图,并解决滚动时内容重复的问题
- universal image loader在listview/gridview中滚动时重复加载图片的问题及解决方法
- 关于ListView的Adapter,解决ListView滚动后内容重复的问题
- 解决fragment+scrollview+Recycleview切换fragment自动滚动到底部问题
- universal image loader在listview/gridview中滚动时重复加载图片的问题及解决方法
- 当ScrollView中内嵌GridView解决GridView和ScrollView重复滚动的问题
- 关于ListView的Adapter,解决ListView滚动后内容重复的问题
- 解决js页面滚动效果scrollTop在FireFox与Chrome浏览器间的兼容问题的方法
- 关于ListView的Adapter,解决ListView滚动后内容重复的问题
- android listview 异步加载图片并防止错位及解决ListView滚动后内容重复的问题
- 解决android中HorizontalScrollView的滚动事件与组件的Touch冲突问题
- 解决js页面滚动效果scrollTop在FireFox与Chrome浏览器间的兼容问题的方法
- 解决wix生成的msi的license对话框空白的问题
- 用JS有效解决移动web浏览器中HTML元素的overflow:scroll滚动属性失效问题
- 手机端局部滚动问题 overflow-y:auto|scroll无效,使用iscroll解决
- 关于ListView的Adapter,解决ListView滚动后内容重复的问题
- 关于ListView的Adapter,解决ListView滚动后内容重复的问题