[MFC] listctrl控件实现对某一行指定颜色

本文详细介绍了如何使用C++和MFC实现一个简单的财务管理系统,通过为NM_CUSTOMDRAW增加消息映射并重写OnCustomDraw函数,实现余额小于0的行用红色凸显。文章涉及财务管理、MFC控件及颜色赋值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

好久没有来博客了,不进则退哎。。。

最近在自己写一个简单的财务管理系统,公司同事一起在来必堡吃午饭,后来人越来越多了,每顿饭的财务管理用excel搞起来很麻烦,干脆自己写个简单的系统来管理。

listctrl控件就是来显示每个成员的名字和余额的。今天想到应该把余额小于0的用红色凸显出来。

其实实现也不难,网上有很多参考的代码。大致思路如下:

1、为NM_CUSTOMDRAW增加一条消息映射,关联OnCustomDraw函数

ON_NOTIFY(NM_CUSTOMDRAW, IDC_LIST1, OnCustomDraw)         


2、重写OnCustomDraw函数,实现对某些行的赋颜色值。主要用到LPNMLVCUSTOMDRAW参数实现颜色的赋值。

void Ctest2Dlg::OnCustomDraw(NMHDR *pnotify, LRESULT *result)
{
	LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)pnotify;
	
	if(lplvcd->nmcd.dwDrawStage == CDDS_PREPAINT)
		*result = CDRF_NOTIFYITEMDRAW;

	if(lplvcd->nmcd.dwDrawStage == CDDS_ITEMPREPAINT)
	{
		CString strBalance = m_listctrl.GetItemText(lplvcd->nmcd.dwItemSpec, 1);   //获取当前行的余额值
		double dblBalance = atof((_bstr_t)strBalance);
		if(dblBalance <= 0)
			lplvcd->clrText = RGB(255, 0, 0);
		else
			lplvcd->clrText = RGB(0, 0, 255);
		*result = CDRF_DODEFAULT;
	}
}


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值