MFC 控制CListCtrl 变换横行文本颜色
1、添加列表变量。
CListCtrl m_ListCtrl;
2、定义颜色枚举。
enum COLOR
{
COLOR_RED,
COLOR_GREEN,
COLOR_BLUE
};
3、关键设置函数。
m_ListCtrl.SetItemData(i, COLOR_RED + i);
4、初始化列表数据,并设置行数据颜色。
void CListEditComboxDlg::Init()
{
m_Edit.ShowWindow(SW_HIDE);
m_ComboBox.ShowWindow(SW_HIDE);
m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
m_ListCtrl.InsertColumn(0, _T("姓名"), LVCFMT_CENTER, 100);
m_ListCtrl.InsertColumn(1, _T("性别"), LVCFMT_CENTER, 80);
m_ListCtrl.InsertColumn(2, _T("年龄"), LVCFMT_CENTER, 80);
SetListText();
}
void CListEditComboxDlg::SetListText()
{
int nRowIdx = m_ListCtrl.GetItemCount();
for (int i = nRowIdx; i < nRowIdx + 3;i++)
{
m_ListCtrl.InsertItem(i, "");
m_ListCtrl.SetItemData(i, COLOR_RED + i);
m_ListCtrl.SetItemText(i, 0, "赵321");
m_ListCtrl.SetItemText(i, 1, "男");
m_ListCtrl.SetItemText(i, 2, "16");
}
}
5、响应列表事件NM_COSTOMDRAW。
void CListEditComboxDlg::OnNMCustomdrawList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTVCUSTOMDRAW pNMCD = reinterpret_cast<LPNMTVCUSTOMDRAW>(pNMHDR);
NMCUSTOMDRAW nmCustomDraw = pNMCD->nmcd;
switch (nmCustomDraw.dwDrawStage)
{
case CDDS_ITEMPREPAINT:
{
if (COLOR_RED == nmCustomDraw.lItemlParam)
{
pNMCD->clrTextBk = RGB(255, 0, 0);
pNMCD->clrText = RGB(255, 255, 255);
}
else if (COLOR_GREEN == nmCustomDraw.lItemlParam)
{
pNMCD->clrTextBk = RGB(0, 255, 0);
pNMCD->clrText = RGB(255, 255, 255);
}
else if (COLOR_BLUE == nmCustomDraw.lItemlParam)
{
pNMCD->clrTextBk = RGB(0,0,255);
pNMCD->clrText = RGB(255,255,255);
}
else
{
}
break;
}
default:
{
break;
}
}
*pResult = 0;
*pResult |= CDRF_NOTIFYPOSTPAINT;
*pResult |= CDRF_NOTIFYITEMDRAW;
return;
}
6、效果。