设置listContrl中指定行的颜色

来源:互联网 发布:mac可以玩使命召唤吗 编辑:程序博客网 时间:2024/05/16 17:14

在MFC中 自己通过手动拖放CListCtrl控件来制作自己的表格; 

目的: 将指定item的行更该颜色;

步骤:

1,在窗口中拖放CListCtrl控件, 单击右键 创建控件对象:

CListCtrl m_list;

2, 手动新建类 CMyListCtrl :public CListCtrl 

类实现代码:

1.1,CMyListCtrl.h#pragma once#include "afxcmn.h"class CMylistCtrl : public CListCtrl{public: CMylistCtrl(void);public: ~CMylistCtrl(void);public: afx_msg void OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult); void SetItemColor(DWORD item, COLORREF color); CMap<DWORD , DWORD& , COLORREF , COLORREF&> MapItemColor; DECLARE_MESSAGE_MAP()};


1.2, CMyListCtrl.cppBEGIN_MESSAGE_MAP(CMylistCtrl, CListCtrl) ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnNMCustomdraw) //    ON_WM_SIZE()END_MESSAGE_MAP()CMylistCtrl::CMylistCtrl(void){}CMylistCtrl::~CMylistCtrl(void){}void CMylistCtrl::OnNMCustomdraw( NMHDR *pNMHDR, LRESULT *pResult ){ *pResult = CDRF_DODEFAULT; NMLVCUSTOMDRAW * lplvdr = (NMLVCUSTOMDRAW*)pNMHDR; NMCUSTOMDRAW &nmcd = lplvdr->nmcd; switch (lplvdr->nmcd.dwDrawStage)//判断状态 { case CDDS_PREPAINT:  *pResult = CDRF_NOTIFYITEMDRAW;  break; case CDDS_ITEMPREPAINT:  COLORREF ItemColor;  //根据在SetItemColor(DWORD iItem, COLORREFcolor) 设置的//ITEM号和COLORREF 在摸板中查找,然后进行颜色赋值。  if (MapItemColor.Lookup(nmcd.dwItemSpec, ItemColor))  {   //lplvdr->clrText = RGB(0,0,0)//ItemColor   lplvdr->clrTextBk = ItemColor;   *pResult = CDRF_DODEFAULT;  }  break; }}void CMylistCtrl::SetItemColor( DWORD item, COLORREF color ){ // m_iCurrentItem = iItem; // m_CurrentColor = color; MapItemColor.SetAt(item, color);//设置某行的颜色 this->RedrawItems(item,item);//重新染色  //this->SetCheck(item,1); this->SetFocus();//设置焦点 UpdateWindow();}

4, 在MFC中包含CMyListCtrl.h 

然后进行替换:

CListCtrl m_list; ->  CMyListCtrl m_list;


其他不变;

5, 在你需要的地方更改颜色:


m_list.SetItemColor(item, (DWORD)RGB(255,255,255));



0 0
原创粉丝点击