15,979
社区成员
发帖
与我相关
我的任务
分享
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);
if ( CDDS_PREPAINT ==pLVCD->nmcd.dwDrawStage )
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )
{
// This is the notification message for an item. We'll request
// notifications before each subitem's prepaint stage.
*pResult = CDRF_NOTIFYSUBITEMDRAW;
}
else if ( (CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage )
{
int nItem=static_cast<int>(pLVCD->nmcd.dwItemSpec );
switch(pLVCD->iSubItem)
{
case 2:
case 4:
{
if (nItem % 2 == 0)
{
COLORREF clrNewTextColor, clrNewBkColor;
clrNewTextColor = RGB(0,0,0);
clrNewBkColor = RGB(198,202,198);
pLVCD->clrText =clrNewTextColor;
pLVCD->clrTextBk =clrNewBkColor;
*pResult = CDRF_DODEFAULT;
break;
}
}
default:
pLVCD->clrText = RGB(0,0,0);
pLVCD->clrTextBk = RGB(255,255,255);
*pResult = CDRF_DODEFAULT;
break;
}
}
// CMyListCtrl
class CMyListCtrl : public CMFCListCtrl
{
DECLARE_DYNAMIC(CMyListCtrl)
public:
CMyListCtrl();
virtual ~CMyListCtrl();
protected:
DECLARE_MESSAGE_MAP()
/*通过虚函数可修改表的行、列的颜色和字体*/
virtual COLORREF OnGetCellBkColor(int nRow, int nColum); // 修改背景色
virtual COLORREF OnGetCellTextColor(int nRow, int nColum); // 修改文本色
virtual HFONT OnGetCellFont(int nRow, int nColum, DWORD dwData = 0); // 修改字体
// 排序处理
virtual int OnCompareItems(LPARAM lParam1, LPARAM lParam2, int iColumn);
2、修改虚函数 virtual COLORREF OnGetCellBkColor(int nRow, int nColum);
// 修改背景色
COLORREF CMyListCtrl::OnGetCellBkColor(int nRow, int nColum)
{
CMainFrame* pFm=(CMainFrame*)AfxGetMainWnd();
CAnalysisRs232View* pView=(CAnalysisRs232View*)pFm->GetActiveView();
if(!pView->GetListIsFocus())
{
// 当表失去焦点时模拟选中
if(nRow==pView->GetItem())
{
COLORREF crBackground = ::GetSysColor(COLOR_HIGHLIGHT); // 系统背景色
return crBackground;
}
}
// 非B通道不处理
if(GetItemText(nRow,0)!=L"1")
{
return CMFCListCtrl::OnGetCellBkColor(nRow, nColum);
}
// 返回背景颜色
return RGB(245, 230, 240); // 使用自定义背景色
}
至于为什么该函数名为 GetCellBkColor,而不是SetCellBkColor,就只能靠你自己去想了,当然有它的意义。