MFC 控制列表控件文本颜色显示

时间:2024-04-02 18:28:19

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、效果。
MFC 控制列表控件文本颜色显示