我将listctrl放在ontimer地下,每次刷新都使显示的内容刷新,刚开始闪烁以为是list由于ontimer刷新频率的问题,但是后来改到有消息驱动list的刷新还是闪烁,查到可能是因为要用双缓冲,但是list空间的绘制是不是也要自己实现呢,是不是有其他的方法可以解决这个问题呢??  谢谢大家了,刚学mfc对立面的一些具体的细节不是特别的明白谢谢大家赐教!

解决方案 »

  1.   

    刷新问题,有时候不一定使用了双缓冲就可以了,还涉及其他的关联机制,你看看你的更新机制是否合适。
    一般很少在OnTimer下处理绘制的方案。关联的有WM_PAINT,WM_NCPAINT,WM_ERASEBKGND....等消息的处理.如果项目紧,并且需求高,可以参考一下我们的产品。目前推广期,专业版也相当优惠,可以看看哦。www.afe-soft.com  SkinBeauty
      

  2.   

    listcontrol提供了虚链表技术,专门解决多数据闪烁问题,具体可google+msdn,可以解决大量数据的刷新闪烁问题,本人侧过过50000条没有问题
      

  3.   

    重载消息响应函数
    void CMonitorDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
    {
    // TODO: Add your message handler code here and/or call default
    Invalidate();//重绘

    CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
    }void CMonitorDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
    {
    // TODO: Add your message handler code here and/or call default
    Invalidate();//重绘
    CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
    }void CMonitorDlg::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    Invalidate();//重绘
    CDialog::OnLButtonDown(nFlags, point);
    }void CMonitorDlg::OnSelchangeDisplay() 
    {
    // TODO: Add your control notification handler code here
    Invalidate();//重绘
    }
      

  4.   

    listctrl内容进行大数据量更新时,避免闪烁
          m_list.SetRedraw(FALSE);
          //更新内容
          m_list.SetRedraw(TRUE);
          m_list.Invalidate();
          m_list.UpdateWindow();
      
    或者参考 
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_cwnd.3a3a.setredraw.asp