MFC中 修改list控件单元格的颜色

之前找了很多!没找到合适的,似乎都要扩展个自定义类,比较麻烦,后来发现个更简单的方法!


首先:重载一个NM_CUSTOMDRAW消息



然后:就自动生成了这个东东


之后:你改为

NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);

	*pResult = 0;

	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 )
	{
		COLORREF m_clrTextBk;

		int nItem = static_cast<int> (pLVCD->nmcd.dwItemSpec);


		// 判断使ListCtrl不同颜色现实的条件
		CString str = m_listResult.GetItemText(nItem ,2);

		std::wstring w_str=str.GetBuffer();
		std::string s_tr=_bstr_t(w_str.c_str());
		float m_height=(float)atof(s_tr.c_str());

		if (m_height<m_distance&&2==pLVCD->iSubItem)
		{
			// 设置该列红色
			m_clrTextBk = RGB(255, 0, 0);
			
		}
		else
		{
			m_clrTextBk = RGB(255, 255, 255) ;
		}

		pLVCD->clrTextBk = m_clrTextBk;
		*pResult = CDRF_DODEFAULT;
	}

NMLVCUSTOMDRAW结构体

typedef struct tagNMLVCUSTOMDRAW {
  NMCUSTOMDRAW nmcd;
  COLORREF clrText;
  COLORREF clrTextBk;
} NMLVCUSTOMDRAW, *LPNMLVCUSTOMDRAW;
 
clrText 表示字体颜色
clrTextBk 表示背景色

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值