mfc 列表框行颜色设置方法

本文介绍了如何在MFC应用中设置CListCtrl列表框控件的行颜色,特别是针对新添加或修改的行进行颜色区分。通过添加NU_CUSTOMDRAW事件并编写相应代码,实现了自定义行颜色的功能。在VC2010环境下,需要注意与VC6的不同,通过示例代码展示了0至7行的定制颜色,其他行保持默认黑色。文章提供了微软官方文档链接以了解更多细节。

指定改变CListCtrl中某一行的颜色,比如说刚添加进去的一行,让它改变颜色,这样记录多了,容易看到自己刚刚加入的行,方便操作可查看,也可以让添加和修改的记录显示不一样的颜色,方便的多了,VC自带的没有这种功能。

虽然说自带没有这个功能,但可以用NU_CUSTOMDRAW

我的环境是vc2010, 听说vc6 没有,需要手动添加。

新建一个mfc 对话框工程,并添加列表框控件,添加一些数据,让他能正常显示一个列表框的表格。这个时候还不能设置行颜色。

添加改变颜色的事件

打开MFC Class Wizard ,用如下方式添加列表框(我的是IDC_LIST2)的NU_CUSTOMDRAW事件,

然后把代码加入如下: 

void CListCtrlTestDlg::OnCustomdrawList2(NMHDR *pNMHDR, LRESULT *pResult)
{
	//LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
	// TODO: Add your control notification handler code here
	//pNMCD->clrTextBk = RGB(51, 153, 255);
	//pNMCD->clrText = RGB(255, 255, 255);
	//*pResult = 0;

	LPNMLVCUSTOMDRAW  lplvcd = (LPNMLVCUSTOMDRAW)pNMHDR;
    *pResult = 0;
	//return ;

switch(lplvcd->nmcd.dwDrawStage)
{
	case CDDS_PREPAINT :
		*pResult = CDRF_NOTIFYITE
MFC(Microsoft Foundation Classes)中,设置列表框(CListBox)中指定项的选中颜色,通常需要通过自定义绘制来实现。你可以通过处理CListBox的NM_CUSTOMDRAW通知消息来定制绘制风格。 以下是一个简单的步骤说明: 1. 首先,你需要为你的CListBox控件添加一个消息映射,以便捕获NM_CUSTOMDRAW通知消息。在你的CListBox派生类中,你可以使用ON_NOTIFY_EX宏来添加消息映射。 2. 在消息处理函数中,你可以检查nDrawItem消息参数中的阶段(CDRF_NOTIFYITEMDRAW),并在此时指定绘制模式。 3. 如果是在绘制项的阶段,你可以在该消息处理函数中获取到DC(设备上下文)以及列表项的索引。 4. 使用CDC类的成员函数来绘制你想要的颜色和样式。 5. 最后,返回CDRF_DODEFAULT,告诉MFC继续使用默认的绘制处理。 例如: ```cpp void CYourListBox::OnNMCustomDraw(NMHDR *pNMHDR, LRESULT *pResult) { LPNMLVCUSTOMDRAW pNMLV = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR); // 根据绘制阶段进处理 switch(pNMLV->nmcd.dwDrawStage) { case CDDS_PREPAINT: *pResult = CDRF_NOTIFYITEMDRAW; break; case CDDS_ITEMPREPAINT: // 设置你想要的背景颜色 pNMLV->clrTextBk = RGB(255, 0, 0); // 例如,红色背景 *pResult = CDRF_DODEFAULT; break; default: *pResult = CDRF_DODEFAULT; break; } } BEGIN_MESSAGE_MAP(CYourListBox, CListBox) ON_WM_NOTIFY() END_MESSAGE_MAP() ``` 在上面的代码中,CYourListBox是自定义的CListBox派生类,你需要将这个类名替换成你实际使用的类名。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值