假设对话框上有一个CListCtrl类的实例m_list,
m_list里面有400个item。对话框上还有一个按钮,
一按按钮,就把m_list最后面200个item删掉。那么我在
按钮的响应函数里写:
fow(i=0;i<200;i++)
  m_list.DeleteItem(m_list.GetItemCount()-1);
这样,发现每删除一条item,m_list都要刷新一次,很慢,
删除200条需要4-5秒。有没有办法都删完再刷新呢?
我知道在C#中可以在删之前m_list.BeginUpdate(),
在删之后m_list.EndUpdate().那么VC里面有没有办法呢?

解决方案 »

  1.   

    1.可以用DeleteAllItems()删除所有的Items
    2.如果确实需要一条一条的删除,用LockWindowUpdate函数锁住更新,然后用UnlockWindowUpdate更新。
      

  2.   

    DeleteAllItems();
    RedrawWindow();
      

  3.   

    m_list.SetRedraw(FALSE);
    fow(i=0;i<200;i++)
      m_list.DeleteItem(m_list.GetItemCount()-1);
    m_list.SetRedraw(TRUE);
      

  4.   

    同意 flashzf,并改为
    m_list.SetRedraw(FALSE);
    m_list.DeleteAllItems();
    m_list.SetRedraw(TRUE);
      

  5.   

    m_list.SetRedraw(FALSE);
    fow(i=0;i<200;i++)
      m_list.DeleteItem(m_list.GetItemCount()-1)
    m_list.SetRedraw(TRUE);
    不过你还是要闪一下的,要完全不闪要自己写了