各位老大,我在CListCtrl的子类对象中使用了虚拟列表的设置
对于虚拟列表的使用一切OK,但是问题出在对该控件进行大小调整时的控件刷新问题.
在对该控件进行大小调整时,虚拟列表会控制显示部分重新刷新,也就是数据会重新绘制.
这样导致的闪屏问题,该如何解决.在该子类中,我对列表的进行了重绘.重绘代码是写在customdraw内的.请问下,如何在这个子类中解决改变窗体大小时的闪屏问题...

解决方案 »

  1.   

    使用memDC,很多软件都自己实现了一个CMemDC的类,可以避免闪烁
      

  2.   

    能说详细点么.这个memDC大概如何实现.
    就我知道的,ListCtrl好象没有提供这个对象
      

  3.   

    有尝试过自己定义一个memDC但是在窗口缩放的时候,需要对该DC大小进行更改
    BITMAP对象好象无法动态更改大小,所以只能释放BITMAP后重新建立,然后重新绘制,这样会比较卡
    同时在该类中进行的一些范围选择,例如鼠标拖拉等,明显的比不使用虚拟列表的ListCtrl慢很多.
    为什么使用了虚拟列表以后反而导致了速度变慢
      

  4.   

    -o-大哥们...牛人们...help me
      

  5.   

    虚拟列表本身不会闪,照你说的应该是你的绘图代码有问题因为无论是否使用虚拟列表,你每次往ListCtrl中新增、插入、修改、删除一个项目,都会导致列表重画~
      

  6.   

    是的哦 虚列表重绘你根本不会看见的 只会重读数据.在这个处理中不需要任何重绘代码.
    你调整大小时是使用SetItemCount设置吗? 但也不会闪动 你可以先设置SetRedraw(FALSE)不过对于虚列表好像无效.
      

  7.   

    你们的方法都试过的...
    调整大小时使用的是setitemcountex我用的是VS2005
    请问绘图代码会有什么问题
      

  8.   

    虚拟列表和自绘是两码子事儿哦,自绘的话可以用双缓冲减少闪烁,虚拟列表是通过响应LVN_GETDISPINFO消息来填充列表内容,和绘制没有关系。
      

  9.   

    同9楼...就是这个问题
    我在后台建立一个memDC对显示数据进行存储.出现如下问题:
    1\在改变大小等需要改变DC大小的时候有时候DC无法申请到足够内存还是什么原因导致无法建立DC,在需要1400*40000+以上DC时出现
    2\在进行多个对象选取的时候如果数量过大导致响应非常慢...这个原因我有在customdraw中对需要绘制的ITEM有效性进行判断,不过一样卡...不知道什么原因另外,这个memDC的显示我是直接调用getdc()显示的
      

  10.   

    如果不使用后台DC而直接进行DC绘制然后显示,这样会明显的有卡的现象,因为我制作的是缩略图类似的LIST,这样每显示一个页面时都要卡上0.几秒
      

  11.   

    还不是很明白.你到到底是问虚列表还是DC?
    还是虚列表显示DC数据?难道说你在LVN_GETDISPINFO处理中有DC绘制代码?1.在需要1400*40000+以上DC时出现
    这样的问题最有效的办法就是根据显示的部分读取相应的部分 DC大小就设置成显示的大小. 不可能一次性申请那么大内存来存DC数据.2\在进行多个对象选取的时候如果数量过大导致响应非常慢...这个原因我有在customdraw中对需要绘制的ITEM有效性进行判断,不过一样卡...不知道什么原因 
    这是一个问题 在列表(无论是否虚列表)数据过大 非常大 全部选择的话会需要一段时间.不过 手动选择的话 你不可能一次性选择几万条 所以 是全选或代码循环选择很多记录的话 会卡. 没办法 你所需要的要求超范 什么总会有个低限的.