第一步:设置单元格背景和字体颜色
int m_iRow[行数][列数] //列表颜色存储容器
void CColorListCtrl::OnNMCustomdraw(NMHDR *pNMHDR,LRESULT *pResult)
{
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR); //关联pNMHDR
*pResult = CDRF_DODEFAULT;
// 检查绘画阶段。如果它是控件的预绘制阶段,那么Windows希望每个项目都有消息。
if(CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage)
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if(CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage)
{
// 这是一个项目的通知消息,将在每个子项的预画阶段之前请求通知。
*pResult = CDRF_NOTIFYSUBITEMDRAW;
}
else if((CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage) //dwDrawStage状态为CDDS_ITEMPREPAINT | CDDS_SUBITEM时
{
/* 红背景 */
if(m_iRow[pLVCD->nmcd.dwItemSpec][pLVCD->iSubItem] == 1)
{
pLVCD->clrTextBk = RGB(255, 0, 0);
pLVCD->clrText = RGB(255, 255, 255);
}
/* 黄色高亮背景 */
else if(m_iRow[pLVCD->nmcd.dwItemSpec][pLVCD->iSubItem] == 2)
{
pLVCD->clrTextBk = RGB(255, 215, 0);
pLVCD->clrText = RGB(0, 40, 255);
}
else
{
pLVCD->clrTextBk = RGB(255, 255, 255);//如果不是选择的“行”和“列”就设置成系统默认的那种颜色。
pLVCD->clrText = 0;
}
*pResult = CDRF_DODEFAULT;
}
}
第二步:批量控制零散单元格
/* 修改单个单元格字体和背景颜色 */
void CColorListCtrl::SetCellColor(int iRow, int iCol, int ColorValue)
{
m_iRow[iRow][iCol] = ColorValue; //m_iRow定义为全局
}
第三步:使用
m_Grid.SetCellColor(行,列, 颜色);
附上vs可执行代码:https://pan.baidu.com/s/1N18gaOnCj7iikGmR4ImCjA 提取码:o9um