设置listContrl中指定行的颜色
在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.cpp BEGIN_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));