对于一个ListCtrl控件,我设置了一个定时器,每隔500ms,就对ListCtrl中的每一行每一列调用
SetItemText()更新一遍,但这样做,ListCtrl闪烁的比较厉害,问一下有什么解决的办法

解决方案 »

  1.   

    to yjgx007(who's superior):
    不懂,给解释解释
      

  2.   

    插入或删除数据之前:SetRedraw(FALSE)
    插入或删除数据之后:SetRedraw(TRUE)
      

  3.   

    To mynamelj(夏娃的诱惑):
    这样写之后,好像还需要点一下listCtrl控件,这样才能显示新信息,否则不更新
      

  4.   

    http://www.codeproject.com/listctrl/xlistctrl.asp
      

  5.   

    插入或者删除数据之前 LockWindowUpdate()
    插入或者删除数据之后 unLockWindowUpdate()
      

  6.   

    http://blog.csdn.net/lixiaosan/archive/2006/04/07/653563.aspx22
      

  7.   

    不要逐行更新,全部SetItemText()后再更新。
      

  8.   

    用背景位图的方法,主要是在OnPaint()中做,方法如下:void MyCUserCtrl::OnPaint()
    {
    CPaintDC dc(this);
    CRect rect;
    GetClientRect(&rect); CRect headerRect;
    GetDlgItem(0)->GetWindowRect(&headerRect);         CDC MenDC;//内存ID表
             CBitmap MemMap;
    MemDC.CreateCompatibleDC(&dc);
             MemMap.CreateCompatibleBitmap(&dc, rect.Width(), rect.Height()); MemDC.SelectObject(&MemMap);
    MemDC.FillSolidRect(&rect, RGB(228, 236, 243));

             //这一句是调用默认的OnPaint(),把图形画在内存DC表上
    DefWindowProc(WM_PAINT, (WPARAM)MemDC.m_hDC, (LPARAM)0);
              
             //输出
    dc.BitBlt(0, headerRect.Height(), rect.Width(), rect.Height(), &MemDC, 0, 
             headerRect.Height(), SRCCOPY);        MemDC.DeleteDC();
            MemMap.DeleteObject();
    }
      

  9.   

    Use CListCtrl::Update and LVS_OWNERDATA