我要实现ListCtrl的隔行显示颜色问题,也就是奇偶的颜色不同,且每行里颜色由上到下是渐变的;在ListCtrl里面不加入内容的时候显示正常,
加上文字后,有文字单元格的背景就变成白色的了,我想让文字的背景也是这种渐变的隔行的渐变颜色 ,可找不到原因?void CColoredListCtrl::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
  //   Tell   Windows   to   paint   the   control   itself.   
  *pResult   =   CDRF_DODEFAULT;   
  LPNMLVCUSTOMDRAW  lplvcd = (LPNMLVCUSTOMDRAW)pNMHDR;
  //int iRow = lplvcd->nmcd.dwItemSpec;
  switch(lplvcd->nmcd.dwDrawStage)
  {
    case CDDS_PREPAINT :
    {
      *pResult = CDRF_NOTIFYITEMDRAW;
      return;
    }
    case CDDS_ITEMPREPAINT:
    {
  *pResult = CDRF_NOTIFYSUBITEMDRAW;
return;
    }
    case CDDS_ITEMPREPAINT | CDDS_SUBITEM://CDDS_SUBITEM | CDDS_PREPAINT | CDDS_ITEM:
    {
COLORREF   clrNewTextColor,   clrNewBkColor;   
int   nItem   =   static_cast<int>(lplvcd->nmcd.dwItemSpec);   
  int nSubItem = lplvcd->iSubItem;
CDC*  pDC = CDC::FromHandle ( lplvcd->nmcd.hdc );

CRect rect;
GetSubItemRect(nItem, nSubItem, LVIR_BOUNDS, rect); if(nItem % 2!= 0)   //奇偶行颜色不同 
{  
             DrawGradient(pDC,&rect,RGB(207,225,251),RGB(116,163,228));//颜色渐变函数
}   
else   
{   
DrawGradient(pDC,&rect,RGB(247,227,171),RGB(225,142,24)); 
}   
  *pResult = CDRF_NOTIFYSUBITEMDRAW;;   
return;
}
  }
}

解决方案 »

  1.   

    一开始在
        case CDDS_ITEMPREPAINT:
        {
    lplvcd->clrText = RGB(0,0,0); ////////////
             *pResult = CDRF_NOTIFYSUBITEMDRAW; 
             return;
        } 
    设置了下 ,后来我把这行给删除掉了,其他地方就没有画文字。
      

  2.   

    在case CDDS_ITEMPREPAINT|CDDS_SUBITEM下面,把clrTextBk赋值为背景色,*pResult=0。
      

  3.   

    我在case CDDS_ITEMPREPAINT: 里面设置了 clrTextBk的背景色 ,可以的,不过这样只能设置单一的颜色。
    我想让它跟没有显示字的单元格一样也显示那种颜色渐变的样子,该如何设置呢? 
    就是让单元格里面的颜色由上到下缓慢变色。我用的是 DrawGradient(pDC,&rect,RGB(207,225,251),RGB(116,163,228));这个函数来画的,是不是一定要用 clrTextBk 来设置呢?
      

  4.   

    那就用SetBkMode把文字背景设置为TRANSPARENT。
      

  5.   

    是不是 clrTextBk的背景色 一定要设置呢
      

  6.   

    取lplvcd->nmcd.hdc,用SetBkMode将该DC设置为TRANSPARENT,然后调用DrawText用该DC画文字,最后,*pResult=CDRF_SKIPDEFAULT。
      

  7.   

    你好 我想问一下DrawGradient是怎样定义的 谢谢