我在CLISTCTRL窗口中显示的记录有117条,每次显示的时候闪的很厉害,请问什么原因,怎么解决?我在离开窗口时调用DeleteAllItems()和显示前调用DeleteAllItems()效果一样,都很闪。

解决方案 »

  1.   

    SetRedraw(FALSE);
    DeleteAllItems();
    SetRedraw(TRUE);
      

  2.   


    SetRedraw(FALSE); // 更新前
    ...
    SetRedraw(TRUE); // 更新后
      

  3.   

    显示的时候做了什么处理...
    SetRedraw(FALSE); 禁止刷新试试
      

  4.   

    我说漏了点,我这个窗口是继承CReportCtrl控件,对不住大家了。因为要对指定记录标色,CLISTCTRL又没有这个功能,所以用了CReportCtrl。我是对每条记录判断后调用
    SetItemTextColor(nIndex, -1, RGB(255, 0, 0));
    着色。
    void CReportCtrl::SetItemTextColor(int nItem, int nSubItem, COLORREF color, BOOL bRedraw)
    {
    if (color == COLOR_INVALID)
    color = ::GetSysColor(COLOR_WINDOWTEXT);
    const int ROWS = GetItemCount();
    const int COLS = GetColumnCount();
    BOOL bRowValid = nItem >= 0 && nItem < ROWS;
    BOOL bColValid = nSubItem >= 0 && nSubItem < COLS; if (bRowValid && bColValid)
    {
    // apply to individual grid
    CItemData* p = (CItemData*)(CListCtrl::GetItemData(nItem));
    ASSERT(p != NULL);
    p->aTextColors[nSubItem] = color;
    }
    else if (bRowValid && !bColValid)
    {
    // apply to whole row for the existing item
    DWORD_PTR  dPtr = CListCtrl::GetItemData(nItem);
    CItemData* p = (CItemData*)(dPtr);
    ASSERT(p != NULL);
    for (int i = 0; i < COLS; i++)
    p->aTextColors[i] = color;
    }
    else if (!bRowValid && bColValid)
    {
    // apply to whole column for all existing items
    for (int i = 0; i < ROWS; i++)
    {
    CItemData* p = (CItemData*)(CListCtrl::GetItemData(i));
    ASSERT(p != NULL);
    p->aTextColors[nSubItem] = color;
    }
    }
    else
    {
    // apply to whole table for all existing items
    for (int i = 0; i < ROWS; i++)
    {
    CItemData* p = (CItemData*)(CListCtrl::GetItemData(i));
    ASSERT(p != NULL);
    for (int j = 0; j < COLS; j++)
    p->aTextColors[j] = color;
    }
    } if (bRedraw)
    RedrawWindow();
    }
    估计是SetItemTextColor函数的RedrawWindow操作吧。
      

  5.   

    我去掉SetItemTextColor语句就不闪了。
      

  6.   

    问题点:就是CReportCtrl类写的不好!!!!!!!