一个CListCtrl控件,会不定时更新数据,可能一两分钟也不更新,也可能100毫秒就要更新一次,类似报警效果!
我现在开的是用一个多线程实时100毫秒更新一次.现在有一个问题就是更新数据时的闪烁效果在严重,我在更新数据的代码的前后加上了
mainlist->SetreDraw(false);
....................
mainlist->setreDraw(true);
mainlist->Invalidate();可是还是有严重的闪烁效果.要怎么样能把这个闪烁去掉呢?谢谢!

解决方案 »

  1.   

    mainlist-> Invalidate(); 
    再次引起刷新,所以会严重闪烁
      

  2.   

    // Updating a control or window with large amounts of data may cause 
    // flicker. In such cases it may be better to turn off drawing//...   //m_list is a member of type CListCtrl
       m_List.SetRedraw(FALSE);  // turn drawing off regardless of list mode//...
    // Update control
    //...   m_List.SetRedraw(TRUE);  // turn drawing back on and update the window   // invalidate the entire control, force painting
       m_List.Invalidate();
       m_List.UpdateWindow();
      

  3.   

    在刷新的时候,不要刷新背景,把mainlist->   Invalidate(); 改为mainlist->   Invalidate(false);     
      

  4.   

    DeleteItem和InsertItem会引起闪烁,所以要尽量避免这两种操作。
    优化你的更新算法,尽量通过SetItemText或SetItemData来改变Item的内容另外你也可以考虑使用虚表,不过大量更新时也会有闪烁的。
      

  5.   

    用CMemDC,先在内存中画,然后与PaintDC拷贝,就不会闪烁啦