Implementing CustomDraw into Your Project

Environment: MFC

Here are the steps you need to perform to use this utility:

  1. Create the MFC project with view as ListView.
  2. Apply styles to the view .cpp file.
  3.   BOOL CMyListView::PreCreateWindow(CREATESTRUCT& cs)
      {
        //adding styles
        cs.style |= LVS_REPORT;
        return CListView::PreCreateWindow(cs);
      }
    
  4. Add columns to the view .cpp file.
  5.   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);
        }
      }
    
  6. Add the following line to the message map area of the view header(.h) file.
  7.     afx_msg void OnCustomDraw(NMHDR* pNMHDR, LRESULT*
                                  pResult);
    
  8. Add the following line to the message map area of the view .cpp file.
  9.     ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
    
  10. Add the OnCustomDraw function.
  11.         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;
                  }
               }
            }
    

Downloads

Download source - 19 Kb


Comments

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

Top White Papers and Webcasts

  • Live Event Date: October 29, 2014 @ 11:00 a.m. ET / 8:00 a.m. PT Are you interested in building a cognitive application using the power of IBM Watson? Need a platform that provides speed and ease for rapidly deploying this application? Join Chris Madison, Watson Solution Architect, as he walks through the process of building a Watson powered application on IBM Bluemix. Chris will talk about the new Watson Services just released on IBM bluemix, but more importantly he will do a step by step cognitive …

  • Protecting business operations means shifting the priorities around availability from disaster recovery to business continuity. Enterprises are shifting their focus from recovery from a disaster to preventing the disaster in the first place. With this change in mindset, disaster recovery is no longer the first line of defense; the organizations with a smarter business continuity practice are less impacted when disasters strike. This SmartSelect will provide insight to help guide your enterprise toward better …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds