默认的CListView的网格通过SetExtendedListViewStyle来实现
DWORD styles = listCtrl.GetExtendedStyle();
listCtrl.SetExtendedStyle(styles | LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
但颜色是灰色的,能否改变这个颜色??
高手指点!!

解决方案 »

  1.   

    自画:
    http://www.codeproject.com/listctrl/xlistctrl.asp
    http://www.codeproject.com/listctrl/skinlist.asp
    http://www.codeproject.com/listctrl/ReportControl.asp
      

  2.   

    可以
    以CListCtrl派生新类
    在新类中重载DrawItem函数
    在DrawItem中插入代码修改当前行。
    下面我的一段代码是DrawItem中改变某一列的,你可以修改它让对不同的行显示不同的颜色,供参考。
    void CSwithListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
    {
    CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
    CRect rcItem(lpDrawItemStruct->rcItem);
    int nItem = lpDrawItemStruct->itemID;
    CImageList* pImageList;

    // Save dc state
    int nSavedDC = pDC->SaveDC(); // Get item image and state info
    LV_ITEM lvi;
    lvi.mask = LVIF_IMAGE | LVIF_STATE;
    lvi.iItem = nItem;
    lvi.iSubItem = 0;
    lvi.stateMask = 0xFFFF; // get all state flags
    GetItem(&lvi);
    // Should the item be highlighted
    BOOL bHighlight =((lvi.state & LVIS_DROPHILITED)
    || ( (lvi.state & LVIS_SELECTED)
    && ((GetFocus() == this)
    || (GetStyle() & LVS_SHOWSELALWAYS)
    )
    )
    );
    // Get rectangles for drawing
    CRect rcBounds, rcLabel, rcIcon,rcClient;
    GetItemRect(nItem, rcBounds, LVIR_BOUNDS);
    GetItemRect(nItem, rcLabel, LVIR_LABEL);
    GetItemRect(nItem, rcIcon, LVIR_ICON);
    CRect rcCol( rcBounds ); 
    CString sLabel = GetItemText( nItem, 0 );


    // Labels are offset by a certain amount  
    // This offset is related to the width of a space character
    int offset = pDC->GetTextExtent(_T(" "), 1 ).cx*2; CRect rcHighlight;
    CRect rcWnd;
    int nExt;
    switch( m_nHighlight )
    {
    case 0:    //high light normal
    nExt = pDC->GetOutputTextExtent(sLabel).cx + offset;
    rcHighlight = rcLabel;
    if( rcLabel.left + nExt < rcLabel.right )
    rcHighlight.right = rcLabel.left + nExt;
    break;
    case 1:   //high light Column
    rcHighlight = rcBounds;
    rcHighlight.left = rcLabel.left;
    break;
    case 2:  //highlight row
    GetClientRect(&rcWnd);
    rcHighlight = rcBounds;
    rcHighlight.left = rcLabel.left;
    rcHighlight.right = rcWnd.right;
    break;
    default:
    rcHighlight = rcBounds;
    }
    CRect rcFill=rcItem;
    rcFill.bottom--;
    if( bHighlight )
    {
    pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
    pDC->SetBkColor(::GetSysColor(COLOR_HIGHLIGHT)); pDC->FillRect(rcItem, &CBrush(::GetSysColor(COLOR_HIGHLIGHT)));
    }
    else
    {
    CRect rcClient, rcRow = rcItem;
    GetClientRect(&rcClient);
    rcRow.right = rcClient.right;
    COLORREF m_colorItem;
    if(nItem==m_nCurItemIndex)
    m_colorItem=RGB(88,167,169);
    else
    m_colorItem=coloryoudefine;//coloryoudefine为你要整行的颜色 pDC->FillRect(rcItem, &CBrush(m_colorItem));
      

  3.   

    //续
    } // Set clip region
    rcCol.right = rcCol.left + GetColumnWidth(0);
    CRgn rgn;
    rgn.CreateRectRgnIndirect(&rcCol);
    pDC->SelectClipRgn(&rgn);
    rgn.DeleteObject(); // Draw state icon
    if (lvi.state & LVIS_STATEIMAGEMASK)
    {
    int nImage = ((lvi.state & LVIS_STATEIMAGEMASK)>>12) - 1;
    pImageList = GetImageList(LVSIL_STATE);
    if (pImageList)
    {
    pImageList->Draw(pDC, nImage,
    CPoint(rcCol.left, rcCol.top), ILD_TRANSPARENT);
    }
    }
    // Draw item label - Column 0
    rcLabel.left += offset/2;
    //rcLabel.right -= offset;
    CRect m_rcLabelText;
    m_rcLabelText=rcLabel;
    pDC->DrawText(sLabel,-1,rcLabel,DT_LEFT | DT_SINGLELINE | DT_NOPREFIX | DT_NOCLIP 
    | DT_VCENTER | DT_END_ELLIPSIS);
    // Draw labels for remaining columns
    LV_COLUMN lvc;
    lvc.mask = LVCF_FMT | LVCF_WIDTH; if( m_nHighlight == 0 ) // Highlight only first column
    {
    pDC->SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));
    pDC->SetBkColor(::GetSysColor(COLOR_WINDOW));
    }

    rcBounds.right = rcHighlight.right > rcBounds.right ? rcHighlight.right :
    rcBounds.right;
    rgn.CreateRectRgnIndirect(&rcBounds);
    pDC->SelectClipRgn(&rgn);
       
    for(int nColumn = 1; GetColumn(nColumn, &lvc); nColumn++)
    {
    rcCol.left = rcCol.right;
    rcCol.right += lvc.cx;
    if( m_nHighlight == HIGHLIGHT_NORMAL )
    pDC->FillRect(rcCol, &CBrush(::GetSysColor(COLOR_WINDOW))); sLabel = GetItemText(nItem, nColumn);
    if (sLabel.GetLength() == 0)
    continue; // Get the text justification
    UINT nJustify = DT_LEFT;
    switch(lvc.fmt & LVCFMT_JUSTIFYMASK)
    {
    case LVCFMT_RIGHT:
    nJustify = DT_RIGHT;
    break;
    case LVCFMT_CENTER:
    nJustify = DT_CENTER;
    break;
    default:
    break;
    } rcLabel = rcCol;
    rcLabel.left += offset;
    rcLabel.right -= offset; pDC->DrawText(sLabel, -1, rcLabel, nJustify | DT_SINGLELINE | 
    DT_NOPREFIX | DT_VCENTER | DT_END_ELLIPSIS);
    }
    pImageList = GetImageList(LVSIL_SMALL);


    if (pImageList)
    {
    UINT nOvlImageMask=lvi.state & LVIS_OVERLAYMASK;
    CPoint m_ptData(rcIcon.left+m_nlItemOffset, rcIcon.top);
    m_ptData.x+=rcIcon.Width();
    pImageList->Draw(pDC, 0/*lvi.iImage*/, 
    m_ptData,
    (bHighlight?ILD_BLEND50:0) | ILD_TRANSPARENT | nOvlImageMask );
    }
    // Draw focus rectangle if item has focus
    if (lvi.state & LVIS_FOCUSED && (GetFocus() == this))
    pDC->DrawFocusRect(rcHighlight);
    // Restore dc
    pDC->RestoreDC( nSavedDC );
    }
      

  4.   

    OwnerDraw,没有别的办法。
    或者去网上找现成的代码。