CListCtrl 的交替行颜色
如何为 CListCtrl 设置交替行颜色。
引言
我看到很多请求询问如何在每个行使用不同颜色的列表控件。经过很长时间,并从这个网站获取了大量有用的信息,现在是时候回报一些东西了。因此,这个 MFC 包装器代码只是用一个交替行颜色的控件来替换 CListCtrl
控件。
使用代码
这个类使用 OnCustomDraw
和 OnEraseBkgnd
来实现交替颜色效果。大部分工作都在 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_colRow1
和 m_colRow2
变量即可。
默认文本颜色是黑色 RGB(0,0,0)。如果您也想更改项目文本颜色,则替换 CColoredListCtrl::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
函数中找到的代码 lplvcd->clrText = RGB(0,0,0);
。