在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));