CListCtrl自绘有3种方法:
第一种:使用WM_ERASEBKGND消息 + NM_CUSTOMDRAW消息配合自绘
WM_ERASEBKGND消息中绘制背景色,比如偶数行为灰色,奇数行为白色。
NM_CUSTOMDRAW消息中设置字体的背景色和字体颜色。
好处:保留了控件大多数的原有属性。不需要自己去输出每一个项目的字体。可以非常方便的设置背景色,以及文字的颜色。缺点:不能设置选中行颜色。
使用到2个数据结构:
typedef struct tagNMLVCUSTOMDRAW
{
NMCUSTOMDRAW nmcd; // 包含客户自绘控件信息的结构
COLORREF clrText; // 列表视图显示文字的颜色
COLORREF clrTextBk; // 列表视图显示文字的背景颜色
} NMLVCUSTOMDRAW, *LPNMLVCUSTOMDRAW;
NMCUSTOMDRAW 结构的定义如下:
typedef struct tagNMCUSTOMDRAWI
{
NMHDR hdr; // 含有通知信息的NMHDR结构
DWORD dwDrawStage; // 目前绘制的步骤
HDC hdc; // 设备上下文句柄
RECT rc; // 绘制的区域
DWORD dwItemSpec; // 绘制项的说明
UINT uItemState; // 当前项的状态
LPARAM lItemlParam; // 应用程序定义的数据
} NMCUSTOMDRAW, FAR * LPNMCUSTOMDRAW
//先定义2个变量
COLORREF m_colRow1;
COLORREF m_colRow2;
1、添加WM_ERASEBKGND小心
BOOL CColoredListCtrl::OnEraseBkgnd(CDC* pDC) //重载
{
CRect rect;
CColoredListCtrl::GetClientRect(rect);
POINT mypoint;
CBrush brush0(m_colRow1); // 颜色1的画笔
CBrush brush1(m_colRow2); // 颜色2的画笔
int chu