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
  • Source Code

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

    Originally posted by: yy

    Source Code!!!

    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
  • 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

  • Live Event Date: September 23, 2015 @ 1:00 p.m. ET / 10:00 a.m. PT The cloud is not just about a runtime platform for your projects – now, you can do your development in the cloud, too. Check out this upcoming eseminar to learn how the cloud improves your development experience and team collaboration. Join Dana Singleterry, Principal Product Manager for Oracle Dev Tools, as he discusses how to simplify every aspect of the development lifecycle, including requirements gathering, version management, code …

  • Thanks to the Internet of Things (IoT), physical assets are turning into participants in real-time global digital markets. The countless types of assets around us will become as easily indexed, searched and traded as any online commodity. While some industries will be tougher to transform than others – those with physical limitations, such as manufacturing, will be harder to digitize – untold economic opportunities exist for growth and advancement. Our research shows this will create a new "Economy …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date