求助关于CListCtrl采用虚拟列表后的刷新问题!!

alzq_zf 2008-09-22 06:29:06
各位老大,我在CListCtrl的子类对象中使用了虚拟列表的设置
对于虚拟列表的使用一切OK,但是问题出在对该控件进行大小调整时的控件刷新问题.
在对该控件进行大小调整时,虚拟列表会控制显示部分重新刷新,也就是数据会重新绘制.
这样导致的闪屏问题,该如何解决.

在该子类中,我对列表的进行了重绘.重绘代码是写在customdraw内的.

请问下,如何在这个子类中解决改变窗体大小时的闪屏问题...
...全文
824 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Scatnow 2011-04-29
  • 打赏
  • 举报
回复
啥方法啊?贴出来啊!!!
alzq_zf 2008-09-27
  • 打赏
  • 举报
回复
自己找到方法了。。。暂时写概要设计……
smallfishff 2008-09-24
  • 打赏
  • 举报
回复
还不是很明白.你到到底是问虚列表还是DC?
还是虚列表显示DC数据?难道说你在LVN_GETDISPINFO处理中有DC绘制代码?

1.在需要1400*40000+以上DC时出现
这样的问题最有效的办法就是根据显示的部分读取相应的部分 DC大小就设置成显示的大小. 不可能一次性申请那么大内存来存DC数据.

2\在进行多个对象选取的时候如果数量过大导致响应非常慢...这个原因我有在customdraw中对需要绘制的ITEM有效性进行判断,不过一样卡...不知道什么原因
这是一个问题 在列表(无论是否虚列表)数据过大 非常大 全部选择的话会需要一段时间.不过 手动选择的话 你不可能一次性选择几万条 所以 是全选或代码循环选择很多记录的话 会卡. 没办法 你所需要的要求超范 什么总会有个低限的.
alzq_zf 2008-09-23
  • 打赏
  • 举报
回复
大哥们啊...顶上去 - -
alzq_zf 2008-09-23
  • 打赏
  • 举报
回复
如果不使用后台DC而直接进行DC绘制然后显示,这样会明显的有卡的现象,因为我制作的是缩略图类似的LIST,这样每显示一个页面时都要卡上0.几秒
alzq_zf 2008-09-23
  • 打赏
  • 举报
回复
同9楼...就是这个问题
我在后台建立一个memDC对显示数据进行存储.出现如下问题:
1\在改变大小等需要改变DC大小的时候有时候DC无法申请到足够内存还是什么原因导致无法建立DC,在需要1400*40000+以上DC时出现
2\在进行多个对象选取的时候如果数量过大导致响应非常慢...这个原因我有在customdraw中对需要绘制的ITEM有效性进行判断,不过一样卡...不知道什么原因

另外,这个memDC的显示我是直接调用getdc()显示的
teleinfor 2008-09-23
  • 打赏
  • 举报
回复
虚拟列表确实存在这个问题,普通的虚拟列表使用尤其在数据行数比较大时,闪烁的很是厉害.
我前段时间也使用虚拟列表进行数据库数据的显示,本来想达到快速无闪烁效果,结果发现不行.

虚拟列表被其他视图掩盖后,如果重新恢复需要重新进行绘制,导致闪烁厉害!还有就是滚动时候也会出现闪烁.

不知道各位大侠有否高见.
菜牛 2008-09-23
  • 打赏
  • 举报
回复
虚拟列表和自绘是两码子事儿哦,自绘的话可以用双缓冲减少闪烁,虚拟列表是通过响应LVN_GETDISPINFO消息来填充列表内容,和绘制没有关系。
alzq_zf 2008-09-23
  • 打赏
  • 举报
回复
你们的方法都试过的...
调整大小时使用的是setitemcountex我用的是VS2005
请问绘图代码会有什么问题
smallfishff 2008-09-23
  • 打赏
  • 举报
回复
是的哦 虚列表重绘你根本不会看见的 只会重读数据.在这个处理中不需要任何重绘代码.
你调整大小时是使用SetItemCount设置吗? 但也不会闪动 你可以先设置SetRedraw(FALSE)不过对于虚列表好像无效.
Sandrer 2008-09-22
  • 打赏
  • 举报
回复
虚拟列表本身不会闪,照你说的应该是你的绘图代码有问题

因为无论是否使用虚拟列表,你每次往ListCtrl中新增、插入、修改、删除一个项目,都会导致列表重画~
alzq_zf 2008-09-22
  • 打赏
  • 举报
回复
-o-大哥们...牛人们...help me
alzq_zf 2008-09-22
  • 打赏
  • 举报
回复
有尝试过自己定义一个memDC但是在窗口缩放的时候,需要对该DC大小进行更改
BITMAP对象好象无法动态更改大小,所以只能释放BITMAP后重新建立,然后重新绘制,这样会比较卡
同时在该类中进行的一些范围选择,例如鼠标拖拉等,明显的比不使用虚拟列表的ListCtrl慢很多.
为什么使用了虚拟列表以后反而导致了速度变慢
alzq_zf 2008-09-22
  • 打赏
  • 举报
回复
能说详细点么.这个memDC大概如何实现.
就我知道的,ListCtrl好象没有提供这个对象
吹泡泡的小猫 2008-09-22
  • 打赏
  • 举报
回复
使用memDC,很多软件都自己实现了一个CMemDC的类,可以避免闪烁

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧