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

  • As virtualization becomes the norm throughout organizations of nearly all sizes, and as more organizations look to private cloud solutions, IT decision makers are increasingly in need of ways to keep storage costs and complexity under control in the face of often-runaway virtual machine (VM) sprawl. Application-aware storage is designed to help achieve these important goals. Read this white paper to learn how application-aware storage allows you to gain VM-level visibility into application performance and …

  • Relying on outside companies to manage your network and server environments for your business and applications to meet the needs and demands of your users can be stressful. This is especially true as many Managed Hosting organizations fail to meet their service level agreements. Read this Forrester total economic impact report and learn what makes INetU different and how they exceed their customers' managed hosting expectations.

Most Popular Programming Stories

More for Developers

RSS Feeds

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