CListCtrl修改指定行的颜色

添加自己的列表控件类CMyListCtrl m_List派生CListCtrl.

//添加消息
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, &CMyListCtrl::OnNMCustomdraw)
//函数实现
void CMyListCtrl::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
{
	 /*修改内容: 
	   改用switch case语句
	   case语句中增加了CDDS_ITEMPREPAINT和CDDS_ITEMPOSTPAINT两个状态判断
	   同时在改变颜色时增加了一个函数SetItemState
	   */
	 static BOOL s_bThisItemSelect = FALSE;   
	 NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR); 
	 int nItemIndex=pLVCD->nmcd.dwItemSpec;
	 *pResult = CDRF_DODEFAULT;   
	 switch (pLVCD->nmcd.dwDrawStage) 
	 {   
	 case CDDS_PREPAINT:  
		 *pResult = CDRF_NOTIFYITEMDRAW;  
		 break;   
	 case CDDS_ITEMPREPAINT:  
		 {    
			 UINT ordin = pLVCD->nmcd.lItemlParam; 
			 s_bThisItemSelect = FALSE; 
			 //选中行颜色改变
			 if (GetItemState(nItemIndex,LVIS_SELECTED) == LVIS_SELECTED/*pLVCD->nmcd.uItemState & CDIS_SELECTED*/)
			 {      
				 s_bThisItemSelect = TRUE; 
				 //增加了下面这个SetItemState函数
				 SetItemState(pLVCD->nmcd.dwItemSpec, 0, LVIS_SELECTED); 
				 pLVCD->clrText = RGB(0,0,255)/*m_SelectItemTextColor*/;     
				 pLVCD->clrTextBk =RGB(255,128,0)/*m_SelectItemBkColor*/;   
			 }          
			 
             else if((nItemIndex==m_nHoverIndex))
			 { //热点行
				 pLVCD->clrTextBk=m_HoverItemBkColor;
				 pLVCD->clrText=m_HoverItemTextColor;
			 }
			 else if(nItemIndex % 2==0)
			 {//偶数行 比如 0、2、4、6
				 pLVCD->clrTextBk=m_EvenItemBkColor;
				 pLVCD->clrText=m_EvenItemTextColor;
			 }
			 else
			 {	//奇数行 比如 1、3、5、7
				 pLVCD->clrTextBk=m_OddItemBkColor;
				 pLVCD->clrText=m_OddItemTextColor;
			 }
		 *pResult = CDRF_NOTIFYPOSTPAINT;    
	}       
		 break;    
		 //加了一个状体判断
	 case CDDS_ITEMPOSTPAINT:   
		 if (s_bThisItemSelect) 
	 	 SetItemState(pLVCD->nmcd.dwItemSpec, 0xFF, LVIS_SELECTED);  
		 break;  
	 } 
	
}

 
 
//添加PreSubclassWindow
void CMyListCtrl::PreSubclassWindow()
{
	// TODO: Add your specialized code here and/or call the base class

	 ModifyStyle(LVS_SHOWSELALWAYS, LVS_SINGLESEL);    // TRICKY!!! can`t with LVS_SHOWSELALWAYS 
	 SetExtendedStyle(GetExtendedStyle()|LVS_EX_FULLROWSELECT);    
	 CListCtrl::PreSubclassWindow(); 
}

我空间代码可以自己看下。 http://download.csdn.net/detail/lcalqf/7815847
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

致一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值