因为需要实时显示信息,我在定时器中显示数据。时间间隔为1S,每次更新的时候,都会先 m_listVersion.DeleteAllItems();再插入数据,可是问题是,现在每隔1秒就闪一次,请大侠帮忙。

解决方案 »

  1.   

    //刷新
    void CCnuWhiteListDlg::OnBnClickedCnuWhitelistRefreshButton()
    {
    // TODO: 在此添加控件通知处理程序代码
    //change by xuying for avoid flash m_ctrCnuWhilteList.SetRedraw(FALSE);
    readCnuWhilteListTable();
    m_ctrCnuWhilteList.SetRedraw(TRUE);
    m_ctrCnuWhilteList.Invalidate();
    m_ctrCnuWhilteList.UpdateWindow();
    UpdateData(FALSE);
    }
    我的项目中也遇到过,加上下面这几句就好了。
    m_ctrCnuWhilteList.SetRedraw(FALSE);

    m_ctrCnuWhilteList.SetRedraw(TRUE);
    m_ctrCnuWhilteList.Invalidate();
    m_ctrCnuWhilteList.UpdateWindow();
      

  2.   


    我在OnTimer里面添加了,效果还是一样的,还是会闪
      

  3.   

    继承CListCtrl类,在OnPaint()里用双缓存画,OnEraseBkgnd直接返回return TRUE;
      

  4.   

    不要m_listVersion.DeleteAllItems(),只插入新数据就不闪了嘛
      

  5.   


    因为更新时,是将数据库里所有的数据重新插入到list中,所以要DeleteAllItems.如果不做这步操作,则会出现很多重复记录。难道在插入前要去判断是否已存在这条记录?然后再更新?这样效率应该会很低吧
      

  6.   

    可以借鉴双缓冲机制,用2个list,显示的为前台list,隐藏的为后台list,执行插入永远在后台list上,插入完成后在隐藏原来的前台list,显示后台list,这样原前台变成后台,后台变成前台,插入永远在后台list上就不会闪了
      

  7.   

    1.不要每次都DeleteAllItems然后重新插入新数据
    2.如果数据量大,建议用虚表方式 
      

  8.   

    因为更新时,是将数据库里所有的数据重新插入到list中,所以要DeleteAllItems.如果不做这步操作,则会出现很多重复记录。这种方法比较简单,易于实现,但是速度慢,会出现界面闪烁,可以改为: 只更新修改过的,没修改的就不更新。