关于改变当前行的颜色.doc
文本预览下载声明
指定改变CListCtrl中某一行的颜色,比如说刚添加进去的一行,让它改变颜色,这样记录多了,容易看到自己刚刚加如的行,方便操作可查看,也可以让添加和修改的记录显示不一样的颜色,方便的多了,VC自带的没有这种功能。
1.首先从CListCtrl 继承一个类,命名为CXListCtrl
在头文件中加摸板
CMapDWORD, DWORD, COLORREF, COLORREF MapItemColor;
好在这里查找你的修改的颜色。
2.自己写个消息映射,可能添加不上,要自己写。
?
[cpp] view plaincopyprint?
BEGIN_MESSAGE_MAP(CXListCtrl,?CListCtrl)??
????ON_NOTIFY_REFLECT(NM_CUSTOMDRAW,?OnNMCustomdraw)??
//??ON_WM_SIZE() ??
END_MESSAGE_MAP()??
OnNMCustomdraw 为实现函数。
3.写OnNMCustomdraw函数。
[cpp] view plaincopyprint?
void?CXListCtrlNew::OnNMCustomdraw(NMHDR?*pNMHDR,?LRESULT?*pResult)??
{??
????//?TODO:?Add?your?control?notification?handler?code?here ??
????*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://如果为画ITEM之前就要进行颜色的改变 ??
????????{??
????????????COLORREF?ItemColor;??
????????????if(MapItemColor.Lookup(nmcd.dwItemSpec,?ItemColor))??
????????????//?根据在?SetItemColor(DWORD?iItem,?COLORREF?color)?设置的 ??
????????????//?ITEM号和COLORREF?在摸板中查找,然后进行颜色赋值。 ??
????????????{??
????????????????//lplvdr-clrText?=?RGB(0,0,0);//ItemColor; ??
????????????????lplvdr-clrTextBk?=?ItemColor;??
????????????????*pResult?=?CDRF_DODEFAULT;??
????????????}??
????????}??
????????break;??
????}??
}??
4.修改指定一行的颜色。
?
[cpp] view plaincopyprint?
void?CXListCtrl::SetItemColor(DWORD?iItem,?COLORREF?color)??
{??
????//????m_iCurrentItem?=?iItem; ??
????//????m_CurrentColor?=?color; ??
??
????MapItemColor.SetAt(iItem,?color);//设置某行的颜色。 ??
????this-RedrawItems(iItem,?iItem);//重新染色 ??
??
????//this-SetCheck(iItem,1); ??
????this-SetFocus();????//设置焦点 ??
????UpdateWindow();??
}??
5.修改全部行的颜色。
[cpp] view plaincopyprint?
void?CXListCtrl::SetAllItemColor(DWORD?iItem,COLORREF?TextBkColor)??
{??
????//INT_PTR?ncount?=?this-GetItemCount(); ??
????if(iItem??0)??
????{??
???
显示全部