65.9K
CodeProject 正在变化。 阅读更多。
Home

CListCtrl 的交替行颜色

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.58/5 (28投票s)

2005年12月19日

CPOL

1分钟阅读

viewsIcon

201552

downloadIcon

8648

如何为 CListCtrl 设置交替行颜色。

Sample Image

引言

我看到很多请求询问如何在每个行使用不同颜色的列表控件。经过很长时间,并从这个网站获取了大量有用的信息,现在是时候回报一些东西了。因此,这个 MFC 包装器代码只是用一个交替行颜色的控件来替换 CListCtrl 控件。

使用代码

这个类使用 OnCustomDrawOnEraseBkgnd 来实现交替颜色效果。大部分工作都在 OnEraseBkgnd 函数中完成,因为这部分代码负责“绘制”我们的对象。我们需要找到显示的行数以及每行的行高。我们分别从 ::GetCountPerPage::GetItemPosition(有关详细信息,请参阅 MSDN)获取这些信息。从这一点开始,事情就变得容易了。

BOOL CColoredListCtrl::OnEraseBkgnd(CDC* pDC) 
{
  // TODO: Add your message handler code here
  //       and/or call default

  CRect rect;
  CColoredListCtrl::GetClientRect(rect);


  POINT mypoint;  
  
  CBrush brush0(m_colRow1);
  CBrush brush1(m_colRow2);


 
  int chunk_height=GetCountPerPage();
  pDC->FillRect(&rect,&brush1);

  for (int i=0;i<=chunk_height;i++)
  {
    GetItemPosition(i,&mypoint);
    rect.top=mypoint.y ;
    GetItemPosition(i+1,&mypoint);
    rect.bottom =mypoint.y;
    pDC->FillRect(&rect,i %2 ? &brush1 : &brush0);
  }

  brush0.DeleteObject();
  brush1.DeleteObject();

  return FALSE;
}

要使用此代码,请将 CColoredListCtrl 类添加到您的项目中,并将任何 CListCtrl 替换为这个类。

如果您想更改行的默认颜色,只需在 CColoredListCtrl 构造函数中用您喜欢的颜色替换 m_colRow1m_colRow2 变量即可。

默认文本颜色是黑色 RGB(0,0,0)。如果您也想更改项目文本颜色,则替换 CColoredListCtrl::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult) 函数中找到的代码 lplvcd->clrText = RGB(0,0,0);

© . All rights reserved.