CListView自画表格线,频繁插入导致表格线闪烁,讨论和解决
尘雨 2006-12-29 10:13:00 环境:SDI程序,View的基类是CListView.显示方式是Report,不使用Grid网格样式
ListView里只有2列
1.在View中设置一个定时器,每10毫秒或者50毫秒插入项,插入的位置是0,最上面
2.在没有网格的情况下,CListView会闪烁,原因在于显示2列的区域会先被擦除为背景色,然后再写项,通过重写OnEraseBackground,时之在填充背景色的时候只填充Client区域排除2列所占区域的区域,而不对2列所占区域进行重绘。解决了
第二条的闪烁问题,使用SetRedraw是不能解决的。请注意这一点
3。增加listview的网格样式,出现闪烁,表格线在闪烁。此时的闪烁与第二条无关,即使OnEraseBackground改为return TRUE也不能消除,说明与擦除背景无关
于是,重写OnPaint,不使用网格样式,而是通过绘图方式,首先使用默认的基类OnPaint,把项的文字部分显示,然后开始绘制表格,只绘制在当前可视的范围。此方法属于自画表格。但是问题依旧。再次更改,使用双缓冲绘制,先在memdc中绘制好表格,然后把该memdc与clientdc的相对应区域(此时该区域的文字绘制已经由基类的OnPain完成)进行SRCPAINT进行处理,实现两个DC叠加,
但是仍然会有一定闪烁。
欢迎高手参与讨论或者帮忙提出解决方案,再次感谢。
也请贴网址的高手注意,该问题的目的是解决自画表格线的情况下频繁在顶端插入数据时的闪烁,或者是使用grid样式时,频繁插入数据导致闪烁。如果贴出的网址代码,确实包含了该问题的解决,就最好。也请大家说两句。让我们这些初学者多学习学习