Environment: MFC
Here are the steps you need to perform to use this utility:
- Create the MFC project with view as ListView.
- Apply styles to the view .cpp file.
- Add columns to the view .cpp file.
- Add the following line to the message map area of the view header(.h) file.
- Add the following line to the message map area of the view .cpp file.
- Add the OnCustomDraw function.
BOOL CMyListView::PreCreateWindow(CREATESTRUCT& cs)
{
//adding styles
cs.style |= LVS_REPORT;
return CListView::PreCreateWindow(cs);
}
void CMyListView::OnInitialUpdate() { CListView::OnInitialUpdate(); CListCtrl& ListCtrl = GetListCtrl(); //inserting 5 cols ListCtrl.InsertColumn(0, "Col-1", LVCFMT_LEFT, 75); ListCtrl.InsertColumn(1, "Col-2", LVCFMT_LEFT, 100); ListCtrl.InsertColumn(2, "Col-3", LVCFMT_LEFT, 100); ListCtrl.InsertColumn(3, "Col-4", LVCFMT_LEFT, 100); ListCtrl.InsertColumn(4, "Col-5", LVCFMT_LEFT, 100); //adding 10 items CString item; for(int i=0;i<10;i++) { item.Format("Item-%d",i); ListCtrl.InsertItem(i,item); } }
afx_msg void OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult);
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
void CMyListView::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult) { *pResult = 0; COLORREF dwColourTxt = 0; COLORREF dwColourBk = RGB(255, 255, 255); LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)pNMHDR; switch(lplvcd->nmcd.dwDrawStage) { Case CDDS_PREPAINT: { *pResult = CDRF_NOTIFYITEMDRAW; return; } // Modify item text and or background Case CDDS_ITEMPREPAINT: { if(lplvcd->nmcd.dwItemSpec == 0) { dwColourTxt = RGB(255, 0, 0); // Red } else if(lplvcd->nmcd.dwItemSpec == 1) { dwColourTxt = RGB(0, 255, 0); // Green } Else { dwColourTxt = RGB(0, 0, 255); // Blue } lplvcd->clrText = dwColourTxt; // If you want the sub items the same as // the item, set *pResult to CDRF_NEWFONT *pResult = CDRF_NOTIFYSUBITEMDRAW; return; } // Modify sub item text and or background case CDDS_SUBITEM | CDDS_PREPAINT | CDDS_ITEM: { // Ignore the first sub item; it is the item // handled above if(lplvcd->iSubItem != 0) { // First sub item if(lplvcd->iSubItem == 1) { dwColourTxt = RGB(0, 127, 127); // Pale blue dwColourBk = RGB(255, 255, 255); // White } // All sub items after the first Else { dwColourTxt = RGB(255, 255, 255); // White if(lplvcd->nmcd.dwItemSpec == 0) { dwColourBk = RGB(255, 0, 102); // Red } else if(lplvcd->nmcd.dwItemSpec == 1) { dwColourBk = RGB(204, 255, 153); // Green } Else { dwColourBk = RGB(0, 102, 204); // Blue } } lplvcd->clrText = dwColourTxt; lplvcd->clrTextBk = dwColourBk; } *pResult = CDRF_NEWFONT; return; } } }