如何解决 CListCtrl 控件在滚动窗口时的闪烁?
由于要显示的数据大于20000条,所以使用的是虚拟列表方式。
但是在拖拽滚动条时,列表控件内的数据闪烁比较严重,不知道如何解决?
PS:仔细看了一下资源管理器程序,在滚动窗口时,不存在闪烁,不知道MS是怎么做的?
问题点数:100、回复次数:7Top
1 楼Qiushen(忘魂)回复于 2006-06-04 20:03:40 得分 60
你是不是自己处理滚动?正常来讲应该是不会的,要不然就是你可能在其它地方有加了什么处理,你是不是在滚动的时候就进行刷新,这个应该是不必要的,只有在最后和最前才进行更新数据Top
2 楼striking(庸人自扰)回复于 2006-06-04 20:05:15 得分 0
CPU 够快, 内存够大。
要不然是会有些闪, 那是因为list要从你指定的数据源取数据。Top
3 楼SanTa()回复于 2006-06-04 20:41:54 得分 0
to: striking(硬撑者)
那是因为list要从你指定的数据源取数据。
~~~~~~~~~~~~嗯,这点是当然的
CPU 够快, 内存够大。要不然是会有些闪
~~~~~~~~~~~
即使是10万条数据在LISTCTRL里也可以实现不闪烁!和机器无关
举个例子:
“资源管理器”程序,你可以选择搜索 C:\*.* 然后拖拽滚动条,它的LISTCTRL控件就不会出现闪烁,在拖动滚动条时会感觉卡,明显是在滚动时做了防闪烁处理。Top
4 楼SanTa()回复于 2006-06-04 20:44:58 得分 0
to: Qiushen(忘魂)
我没有自己处理滚动,只不过数据量比较大而已。
LISTCTRL中如果行数比较多,在拖滚动条时都是一闪一闪的。Top
5 楼Qiushen(忘魂)回复于 2006-06-04 20:52:36 得分 0
to:SanTa()
我想应该是没有这个问题,我记得以前是加了几万条的记录(加了很久,机子像死掉一样,呵呵),加完后在拉的时候是没什么闪的,你在想一下有没有在什么地方加了刷新的功能,一般是不用加刷新Top
6 楼allenhiman(9Ft)回复于 2006-06-04 21:17:31 得分 30
to搂主:
我记得windows好像有个视觉设置,如果设为a?屏幕就不会闪,设定b?就会闪
比如用鼠标拖动改变一个窗口大小的时候,有闪和不闪两种效果。我想就是是否及时刷新(重画)界面的缘故, 提个意见可能复杂点。响应list的onscroll事件 通过某种方法确定用户拖动的快慢(记录时间间隔,上次位置?),慢就及时刷新,快就等最后或到达某个时间点的时候刷新,可能这就是你感觉win卡的缘故。。。当然这并不好玩儿! D:
setredraw(false)//禁止刷新
setredraw(true)//启用刷新Top
7 楼lixiaosan(小三)回复于 2006-06-05 13:51:13 得分 10
use virtual list
http://msdn2.microsoft.com/en-us/library/ye4z8x58.aspx
http://www.codeguru.com/cpp/controls/listview/advanced/article.php/c4151/
http://www.codeproject.com/listctrl/virtuallist.aspTop




