请教各位大虾,情况是这样的:
现在有个文件存储了超过300万条记录,需要将这些记录读取出来并在CListBox上显示,由于每次插入的时候都会不停的闪动,看了眼花。现在我想做成类似Windows系统中显示搜索某个关键字的文件时,其滚动条在不断缩小但还停留在当前查看的某行信息,只有用户往下拖滑块的时候才将显示新的内容
之前我有做过当滑动滑块时才读取文件,速度慢还好,速度快了滑块就不听使唤了
或者是我用了两个CListBox控件,一个显示,一个隐藏,隐藏的那个从缓冲中取数据插入数据,达到设定的数目后将隐藏的显示,将显示的隐藏,交替进行,只是这样速度上慢了一半。
如何能更快的插入数据又不会出现闪屏,最好就像上述说的那样,做成windows搜索效果
请问如何做呢,帮帮忙

解决方案 »

  1.   

    SetRedraw?插完了再调用它显示?
      

  2.   

    我试过在插入前用m_listbox.SetRedraw(SB_VERT,false);
    插入操作
    完成读取数据
    m_listbox.SetRedraw(SB_VERT,true);
    但还是出现不断闪屏,不起作用,每插入一条记录都会立刻显示出来,而我插入数据是夹SetRedraw(SB_VERT,false)和SetRedraw(SB_VERT,true)设置之间的
      

  3.   

    可以考虑 CListCtrl 虚拟列表
    http://blog.csdn.net/xdsoft365/article/details/6239695
      

  4.   

    拖动时防闪:
    http://www.codeguru.com/cpp/controls/treeview/usingimages/article.php/c16161/Overcome-Window-Flicker-While-Dragging.htm
      

  5.   

    LockWindowUpdate()反而使得窗口没法拖动了,好像整个软件界面给锁住没法操作
    用了SetRedraw(false)函数,在数据插入期间,比如一次500条记录,拖动滑块时文本列表怎么不动呢,而插入完毕后用SetRedraw(true)函数后才能拖动,好像插入期间滑块不起作用了,这是什么问题导致的,帮帮忙
      

  6.   

    数据插入期间,比如一次500条记录:LockWindowUpdate()//就是叫他不动
    以后UnlockWindowUpdate()