本帖最后由 zifeiyuuuu 于 2011-10-18 09:09:37 编辑

解决方案 »

  1.   

    好无奈啊,
    谁有  可指定行的背景色,前景色的列表控件-扩展CListCtrl类支持列排序,
    这个控件的分享一下啊、、、、
    哎,每分真难熬啊、、、
      

  2.   

    if ( (CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage )
        {        
            COLORREF clrNewBkColor;
            int    nItem = static_cast<int>( pLVCD->nmcd.dwItemSpec ); 

    // if (pLVCD->iSubItem % 2 == 0)
    // {
    //  clrNewBkColor = RGB(0xFF,0xFF,0xFF);
    // }
    // else
    // {
    // clrNewBkColor = RGB(0xFF,0x90,0x90);        
    // } if (nItem % 2 == 0)
    {
    clrNewBkColor = RGB(0x53,0xFF,0x53);        //Set the bkgrnd color to green
    }
    else
    {
    clrNewBkColor = RGB(0xFF,0xFF,0xAA);        //Set the bkgrnd color to red
    }

            pLVCD->clrTextBk = clrNewBkColor;    
            // Tell Windows to paint the control itself.
            *pResult = CDRF_DODEFAULT; 
        }这段代码希望对你有点帮助
      

  3.   

    在OnDrawItem中分别对没每一行进行设置颜色.
      

  4.   


    void Cxxx::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
    {
    // TODO: Add your message handler code here and/or call default
    if (nIDCtl == IDC_LIST)
    {
    CListCtrl* pList = m_listxxx;

    CDC* pDC  = CDC::FromHandle(lpDrawItemStruct->hDC);

    int  nItem = lpDrawItemStruct->itemID;
    BOOL bFocused = lpDrawItemStruct->itemState & ODS_FOCUS;
    BOOL bSelected = lpDrawItemStruct->itemState & ODS_SELECTED; CRect rect, rectView;
    GetClientRect(&rectView);
    CRect rcItem(lpDrawItemStruct->rcItem);
    CRect rcFocus(lpDrawItemStruct->rcItem);
    CPen  pen(PS_SOLID, 1, ::GetSysColor(COLOR_GRAYTEXT)); COLORREF clrOldText = pDC->SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));
    CFont *pOldFont = pDC->SelectObject(CAfxUtil::GetStockFont(FONT_NORMAL));
    CPen *pOldPen = pDC->SelectObject(&pen);
    int nBkMode = pDC->SetBkMode(TRANSPARENT); int nColNum = pList->GetHeaderCtrl()->GetItemCount();
    int wid  = rcItem.left;
    for(int i = 0; i < nColNum; i++)
    {
    rect = rcItem;
    rect.left = wid; 
    wid += pList->GetColumnWidth(i);
    rect.right = wid; 

    //如果列不在客户区
    if(rect.right  <= rectView.left ||
       rect.left   >= rectView.right ||
       rect.bottom <= rectView.top ||
       rect.top    >= rectView.bottom) 
    {
    continue;
    } if(rect.Width() <= 2) 
    {
    continue;
    } CRect rcSubItem(&rect);
    //背景颜色和文本颜色
    COLORREF clrBk, clrText;
    if (bSelected && bFocused && (::GetFocus() == pList->m_hWnd))
    {
    clrBk = ::GetSysColor(COLOR_HIGHLIGHT);
    clrText = ::GetSysColor(COLOR_HIGHLIGHTTEXT); 
    pDC->SelectObject(CAfxUtil::GetStockFont(FONT_NORMAL));
    }
    else 
    {
    clrBk = ::GetSysColor(COLOR_WINDOW);
    clrText = ::GetSysColor(COLOR_HIGHLIGHT); 
    pDC->SelectObject(CAfxUtil::GetStockFont(FONT_NORMAL));
    } pDC->FillSolidRect(rect, RGB(0xFF, 0xFF, 0xE0));
    pDC->SetTextColor(clrText);
    if(clrBk != ::GetSysColor(COLOR_WINDOW))
    {
    pDC->FillSolidRect(&rcSubItem, clrBk);
    } rcSubItem.InflateRect(-5, -0, -3, -1);
    DWORD dwDrawStyle = DT_LEFT| DT_SINGLELINE | DT_VCENTER | DT_NOPREFIX;
    pDC->DrawText(pList->GetItemText(nItem, i), rcSubItem, dwDrawStyle);
    pDC->MoveTo(rect.right-1, rect.top);
    pDC->LineTo(rect.right-1, rect.bottom);
    } pDC->MoveTo(0, rcItem.bottom-1);
    pDC->LineTo(rcItem.right, rcItem.bottom-1); //画焦点矩形
    if(bFocused && (::GetFocus() == pList->m_hWnd))
    {
    rcFocus.InflateRect(-2, -2);
    pDC->DrawFocusRect(&rcFocus);
    }
    pDC->MoveTo(0, rcItem.bottom-1);
    pDC->LineTo(rcItem.right, rcItem.bottom-1); pDC->SetTextColor(clrOldText);
    pDC->SetBkMode(nBkMode);
    pDC->SelectObject(pOldFont);
    pDC->SelectObject( pOldPen );
    pen.DeleteObject();
    }
    else
    {
    xx::OnDrawItem(nIDCtl, lpDrawItemStruct);
    }
    }