可以自己添加消息映射阿!处理NM_CUSTOMDRAW消息,但是在class wizard中可能看不到这个消息,可以自己手动添加1. BEGIN_MESSAGE_MAP(CIHISSERVERView, CListView) //{{AFX_MSG_MAP(CIHISSERVERView) ON_NOTIFY_REFLECT(NM_DBLCLK, OnShowAlarm) ON_NOTIFY_REFLECT(NM_RCLICK, OnRclick) ON_COMMAND(IDM_SHOWALARM, OnShowalarmDlg) ON_WM_CREATE() ON_COMMAND(IDM_FINDALARM, OnFindalarm) ON_COMMAND(IDM_SHOWALARMINFO, OnShowalarminfo) ON_COMMAND(IDM_PROCESSALARMINFO, OnProcessalarminfo) ON_COMMAND(IDM_CLEARALL, OnClearall) ON_WM_ERASEBKGND() ON_WM_HSCROLL() ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw) // 自己添加这行代码 //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CListView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CListView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CListView::OnFilePrintPreview) END_MESSAGE_MAP()2. void CIHISSERVERView::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult) { // Contains information specific to an NM_CUSTOMDRAW // notification message sent by a list-view control. // mean:draw each item.set txt color,bkcolor.... NMLVCUSTOMDRAW* pLVCD = (NMLVCUSTOMDRAW*)(pNMHDR); // Take the default processing unless we set this to something else below. *pResult = CDRF_NEWFONT; // First thing - check the draw stage. If it's the control's prepaint // stage, then tell Windows we want messages for every item. if ( pLVCD->nmcd.dwDrawStage==CDDS_PREPAINT) { *pResult = CDRF_NOTIFYITEMDRAW; } // This is the notification message for an item. We'll request // notifications before each subitem's prepaint stage. else if ( pLVCD->nmcd.dwDrawStage==CDDS_ITEMPREPAINT ) { COLORREF m_crTextBk , m_clrText; int nItem = static_cast<int> (pLVCD->nmcd.dwItemSpec);
BEGIN_MESSAGE_MAP(CIHISSERVERView, CListView)
//{{AFX_MSG_MAP(CIHISSERVERView)
ON_NOTIFY_REFLECT(NM_DBLCLK, OnShowAlarm)
ON_NOTIFY_REFLECT(NM_RCLICK, OnRclick)
ON_COMMAND(IDM_SHOWALARM, OnShowalarmDlg)
ON_WM_CREATE()
ON_COMMAND(IDM_FINDALARM, OnFindalarm)
ON_COMMAND(IDM_SHOWALARMINFO, OnShowalarminfo)
ON_COMMAND(IDM_PROCESSALARMINFO, OnProcessalarminfo)
ON_COMMAND(IDM_CLEARALL, OnClearall)
ON_WM_ERASEBKGND()
ON_WM_HSCROLL()
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw) // 自己添加这行代码
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CListView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CListView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CListView::OnFilePrintPreview)
END_MESSAGE_MAP()2.
void CIHISSERVERView::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
// Contains information specific to an NM_CUSTOMDRAW
// notification message sent by a list-view control.
// mean:draw each item.set txt color,bkcolor....
NMLVCUSTOMDRAW* pLVCD = (NMLVCUSTOMDRAW*)(pNMHDR); // Take the default processing unless we set this to something else below.
*pResult = CDRF_NEWFONT; // First thing - check the draw stage. If it's the control's prepaint
// stage, then tell Windows we want messages for every item.
if ( pLVCD->nmcd.dwDrawStage==CDDS_PREPAINT)
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
// This is the notification message for an item. We'll request
// notifications before each subitem's prepaint stage.
else if ( pLVCD->nmcd.dwDrawStage==CDDS_ITEMPREPAINT )
{
COLORREF m_crTextBk , m_clrText;
int nItem = static_cast<int> (pLVCD->nmcd.dwItemSpec);
CListCtrl &m_list = GetListCtrl();
CString str1 = m_list.GetItemText(nItem ,15);
bool bDBImplFail = false ;
if (str1 == "信息不祥")
{
m_crTextBk = RGB(255, 255, 0) ;
m_clrText = RGB(128, 0, 128) ;
}
else
{
m_crTextBk = RGB(150, 255, 255);
m_clrText = RGB(12,26,234);
}
pLVCD->clrTextBk = m_crTextBk;
pLVCD->clrText = m_clrText; *pResult = CDRF_DODEFAULT;
}
}3.
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CIHISSERVERView)
public:
virtual void OnDraw(CDC* pDC); // overridden to draw this view
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
virtual void OnInitialUpdate(); // called first time after construct
virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
//}}AFX_VIRTUAL
afx_msg void OnCustomDraw(NMHDR*, LRESULT*);