指定改變ListCtrl中某一行的顏色
阿新 • • 發佈:2018-12-22
1.首先從CListCtrl 繼承一個類,命名為CXListCtrl
在標頭檔案中加印射
CMap<DWORD, DWORD&, COLORREF, COLORREF&> MapItemColor;
好在這裡查詢你的修改的顏色。
2.自己寫個訊息對映,可能新增不上,要自己寫。
BEGIN_MESSAGE_MAP(CXListCtrl, CListCtrl)
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnNMCustomdraw)
// ON_WM_SIZE()
END_MESSAGE_MAP()
OnNMCustomdraw 為實現函式。
3.寫OnNMCustomdraw函式。
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;
}
}
5.修改全部行的顏色。
void CXListCtrl::SetAllItemColor(/*DWORD iItem,COLORREF TextBkColor*/)
{
COLORREF TextBkColor[2] ={RGB(255,0,0), RGB(0,255,0)};
DWORD ncount = this->GetItemCount();
for(DWORD numItem = 0; numItem < ncount ; numItem++)
{
MapItemColor.SetAt(numItem, TextBkColor[numItem%2]);
}
this->RedrawItems(0, ncount);
}
在標頭檔案中加印射
CMap<DWORD, DWORD&, COLORREF, COLORREF&> MapItemColor;
好在這裡查詢你的修改的顏色。
2.自己寫個訊息對映,可能新增不上,要自己寫。
BEGIN_MESSAGE_MAP(CXListCtrl, CListCtrl)
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnNMCustomdraw)
// ON_WM_SIZE()
END_MESSAGE_MAP()
OnNMCustomdraw 為實現函式。
3.寫OnNMCustomdraw函式。
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;
}
}
5.修改全部行的顏色。
void CXListCtrl::SetAllItemColor(/*DWORD iItem,COLORREF TextBkColor*/)
{
COLORREF TextBkColor[2] ={RGB(255,0,0), RGB(0,255,0)};
DWORD ncount = this->GetItemCount();
for(DWORD numItem = 0; numItem < ncount ; numItem++)
{
MapItemColor.SetAt(numItem, TextBkColor[numItem%2]);
}
this->RedrawItems(0, ncount);
}