我要实现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;
}
}
}
加上文字后,有文字单元格的背景就变成白色的了,我想让文字的背景也是这种渐变的隔行的渐变颜色 ,可找不到原因?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;
}
}
}
case CDDS_ITEMPREPAINT:
{
lplvcd->clrText = RGB(0,0,0); ////////////
*pResult = CDRF_NOTIFYSUBITEMDRAW;
return;
}
设置了下 ,后来我把这行给删除掉了,其他地方就没有画文字。
我想让它跟没有显示字的单元格一样也显示那种颜色渐变的样子,该如何设置呢?
就是让单元格里面的颜色由上到下缓慢变色。我用的是 DrawGradient(pDC,&rect,RGB(207,225,251),RGB(116,163,228));这个函数来画的,是不是一定要用 clrTextBk 来设置呢?