MFC——Listcontrol 添加背景颜色

     在MFC中,我们经常会需要给自己的Listcontrol 添加背景颜色,下面便是如何添加的详细过程。首先需要你的程序有一个ListCtrl在对话框上,并且这个ListCtrl处于Report和多列模式。

     Custom draw可以被想象成一个轻量级的,容易使用的重绘方法(重绘方法还有几种,例如Owner Draw等)。这种容易来自于我们只需要处理一个消息(NM_CUSTOMDRAW),就可以让Windows为你干活了,你就不用被逼去处理"重绘过程"中所有的脏活了。

     Custom draw 的消息映射入口:
Custom draw 是一个类似于回调的处理过程,Windows在绘制List Ctrl的某个时间点上通过 Notification 消息通知你的程序,你可以选择忽略所有的通知(这样你就会看到标准的ListCtrl),或者处理某部分的绘制(实现简单的效果),甚至整个的控件都由你来绘制(就象使用Owner-Drawing一样)。这个机制的真正卖点是:你只需要实现一些你需要的,其余的可以让Windows为你代劳。

     使用Custom draw:
首先添加一个消息映射:
1.在工程的.cpp文件中的BEGIN_MESSAGE_MAP下添加,其中IDC_LIST1是CListCtrl控件的ID

即:ON_NOTIFY(NM_CUSTOMDRAW, IDC_LIST1, OnCustomdrawList)

 
 2.在工程的.h文件类的声明内添加: 
3.在工程的.cpp中写函数实现:
void CMyChattingroom_clientDlg::OnCustomdrawList(NMHDR *pNMHDR, LRESULT *pResult)
{
	
	NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );

	*pResult = CDRF_DODEFAULT;



	if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage )
	{
		*pResult = CDRF_NOTIFYITEMDRAW;
	}
	else if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )
	{
		COLORREF crText,crBk;
		//奇偶判断
		if ( (pLVCD->nmcd.dwItemSpec % 2) == 0 )
		{
			crText = RGB(0,0,0);//RGB(32,32,255);
			crBk =RGB(229,232,239);
		}
		else if ( (pLVCD->nmcd.dwItemSpec % 2) == 1 )
		{
			crText = RGB(0,0,0);
			crBk = RGB(240,247,249);
		}
		else
		{
			crText = RGB(0,0,0);
			crBk = RGB(0,0,126);
		}


		pLVCD->clrText = crText;
		pLVCD->clrTextBk = crBk;
		//设置选择项的颜色
		if( this->mylistcontrol.GetItemState(pLVCD->nmcd.dwItemSpec, CDIS_SELECTED) )
		{
			crBk =RGB(75, 149, 229);//itunes//RGB(10, 36, 106);//RGB(0, 0, 64);
			crText = RGB(255,255,255);
			pLVCD->clrText = crText;
			pLVCD->clrTextBk = crBk;					
			*pResult = CDRF_NEWFONT;
		}
		if(LVIS_SELECTED == mylistcontrol.GetItemState(pLVCD->nmcd.dwItemSpec,LVIS_SELECTED))
		{
			//清除选择状态,如果不清除的话,还是会显示出蓝色的高亮条
			BOOL b = mylistcontrol.SetItemState(pLVCD->nmcd.dwItemSpec,0,LVIS_SELECTED); 
			pLVCD->clrText = crText;
			pLVCD->clrTextBk = crBk;

			*pResult = CDRF_NEWFONT;
			return;
		}
		*pResult = CDRF_NEWFONT;

	}
}
经过以上几步就完成了Custom draw消息的添加,可以实现一些简单的美化效果。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值