Changing the Background Color of Individual Listview Columns

Environment: VC6 SP4, NT4 SP3, Win9x/Me/2K/XP, IE 4.0 or above

To set the background color of a column, the list view control has to be owner drawn. The textbackground and textcolor of items can be set by using ownerdraw, but the empty space in the listview remains. For this, we have to override OnEraseBkgnd(CDC* pDC).

// Add this to the message map
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
ON_WM_ERASEBKGND()

// You need to declare the oncustomdraw message handlers to
// the header
afx_msg void OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);

// Then add this code
void CMyView::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
  *pResult = 0;

  LPNMLVCUSTOMDRAW  lplvcd = (LPNMLVCUSTOMDRAW)pNMHDR;

  switch(lplvcd->nmcd.dwDrawStage)
  {
    case CDDS_PREPAINT :
    {
      *pResult = CDRF_NOTIFYITEMDRAW;
      return;
    }

    // Modify item text and or background
    case CDDS_ITEMPREPAINT:
    {
      lplvcd->clrText = RGB(0,0,0);
      // 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:
    {
        if(lplvcd->iSubItem %2){
          lplvcd->clrTextBk = RGB(255,255,255);
        }
        else{
          lplvcd->clrTextBk = RGB(247,247,247);
        }

        *pResult = CDRF_NEWFONT;
        return;
      }
  }

}

BOOL CMyView::OnEraseBkgnd(CDC* pDC)
{
  CRect rect;
  GetClientRect(rect);

  CBrush brush0(RGB(247, 247, 247));
  CBrush brush1(RGB(255, 255, 255));

  SCROLLINFO si;
  ZeroMemory(&si, sizeof(SCROLLINFO));
    si.cbSize = sizeof(SCROLLINFO);
    si.fMask = SIF_POS;
  GetScrollInfo(SB_HORZ, &si);
  rect.left -= si.nPos;


  for(int i=0;i<=GetListCtrl().GetHeaderCtrl()
                             ->GetItemCount();i++){
    rect.right = rect.left+GetListCtrl().GetColumnWidth(i);
    pDC->FillRect(&rect,i%2 ? &brush1 : &brush0);
    rect.left += GetListCtrl().GetColumnWidth(i);
  }

  brush0.DeleteObject();
  brush1.DeleteObject();

  return FALSE;
}


Comments

  • Changing the Background Color of Individual Listview Columns

    Posted by billgate_qn on 03/28/2006 06:41am

    I think this title is excellent but it doen't have the objects demo source if you have, please share it for us Thanks and best regards

    Reply
  • Add a icon to a list view column other than the first column

    Posted by Legacy on 05/02/2003 12:00am

    Originally posted by: Cinky

    Hi,
    
    

    I need a List view control, which i can subclass and a icon instead of text to the 4th column of the listview control
    If anyone has any suggestions plz reply to this mail
    Also if there r controls avaulable with these feature that r free or can be bought - please let me know
    Thanks a lot!!!!!!!!!!!!!!

    • up to it

      Posted by kinglu on 02/16/2009 01:23am

      I need to do the same thing, but I have never found the resolutoin.

      Reply
    Reply
  • Could you share the object demo source?

    Posted by Legacy on 03/13/2003 12:00am

    Originally posted by: zikin

    It seem so wonderful! could you share it for me to study ?

    Reply
  • Where is Source Code?

    Posted by Legacy on 08/31/2002 12:00am

    Originally posted by: guoj

    Where I can find it?

    Reply
  • Very nice.

    Posted by Legacy on 08/27/2002 12:00am

    Originally posted by: Dong Soo Han

    Very nice and impressive. Good Job.
    Thanks.

    Reply
  • Super, but need full source code

    Posted by Legacy on 08/26/2002 12:00am

    Originally posted by: Bala

    Hi,

    I want to change Background color for my ClistCtrl, When I click CListCtrl Check Box, if I uncheck, it shoud repaint to original color. Please help for this.

    If u send full code for my requirements, I would be thankfull to you,

    REgards
    Bala...

    Reply
  • Source Code

    Posted by Legacy on 08/26/2002 12:00am

    Originally posted by: yy

    Source Code!!!

    Reply
  • good

    Posted by Legacy on 08/25/2002 12:00am

    Originally posted by: xiaogi

    excellent
    it helps solve my problem

    Reply
  • Very nice and good job

    Posted by Legacy on 08/23/2002 12:00am

    Originally posted by: internet_man

    What setting bold font in ListView?

    Reply
  • Problem if using style LVS_ICON, LVS_SMALLICON and LVS_LIST

    Posted by Legacy on 08/23/2002 12:00am

    Originally posted by: internet_man

    If using style LVS_ICON, LVS_SMALLICON and LVS_LIST
    not correct background.

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Learn How A Global Entertainment Company Saw a 448% ROI Every business today uses software to manage systems, deliver products, and empower employees to do their jobs. But software inevitably breaks, and when it does, businesses lose money -- in the form of dissatisfied customers, missed SLAs or lost productivity. PagerDuty, an operations performance platform, solves this problem by helping operations engineers and developers more effectively manage and resolve incidents across a company's global operations. …

  • Live Event Date: December 18, 2014 @ 2:00 p.m. ET / 11:00 a.m. PT The Internet of Things (IoT) incorporates physical devices into business processes using predictive analytics. While it relies heavily on existing Internet technologies, it differs by including physical devices, specialized protocols, physical analytics, and a unique partner network. To capture the real business value of IoT, the industry must move beyond customized projects to general patterns and platforms. Check out this upcoming webcast …

Most Popular Programming Stories

More for Developers

RSS Feeds