SDK ListView改变某一行某一列的文字颜色/背景颜色

时间:2022-05-07 15:04:13

注册窗口类,CreateWindowEx创建窗口,同样用这个函数创建一个ListView,添加一些ITEM。

在窗口消息处理函数中处理WM_NOTIFY的NM_CUSTOMDRAW消息,代码框架如下

LRESULT DoMsg(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_CREATE:
{
//do some thing
}
break;
case WM_CLOSE:
{
//do some thing
}
break;
case WM_NOTIFY:
{
LPNMHDR pNmhdr = (LPNMHDR)lParam;
switch (pNmhdr->code)
{
case NM_CUSTOMDRAW:
{
//请确保是ListView的消息,这里未判断
LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)lParam;
switch (lplvcd->nmcd.dwDrawStage)
{
case CDDS_PREPAINT:
{
return CDRF_NOTIFYSUBITEMDRAW;
}
break;
case CDDS_ITEMPREPAINT:
{
return CDRF_NOTIFYSUBITEMDRAW;
}
break;
case (CDDS_ITEMPREPAINT|CDDS_SUBITEM):
{
/*
lplvcd->nmcd.dwItemSpec//行索引
lplvcd->iSubItem//列索引
lplvcd->clrText = RGB(255, 0, 0);//改变文字颜色
lplvcd->clrTextBk//背景颜色,未测试
*/
return CDRF_DODEFAULT;
}
break;
}
}
break;
default:
break;
}
}
break;
default:
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
return S_OK;
}


需要注意的是,如果你不打算改变某SubItem的颜色,也要对clrText进行修改,否则使用的就是上一次的颜色。

更多信息请参阅MSDN,关键字"NM_CUSTOMDRAW"