Click here to Skip to main content
11,925,292 members (57,874 online)
Click here to Skip to main content
Add your own
alternative version


51 bookmarked

Indicating an empty ListView

, 11 Jan 2000 CPOL
Rate this:
Please Sign up or sign in to vote.
Instead of presenting a blank screen if your list control is empty, why not try this?

Sample Image - EmptyLV.gif

When using a ListView it may be useful to inform the user that the control is empty, like Microsoft Outlook does. Doing this is pretty straightforward. Just derive your own ListView control from CListCtrl and add a WM_PAINT event handler to your derived class.

class CEmptyListCtrl : public CListCtrl
// Construction

// Overrides
	// ClassWizard generated virtual function overrides

// Implementation

// Generated message map functions
	afx_msg void OnPaint();

Then, in OnPaint member function, implement the code necessary to handle the empty condition.

void CEmptyListCtrl::OnPaint() 
    if (GetItemCount() <= 0)
        COLORREF clrText = ::GetSysColor(COLOR_WINDOWTEXT);
        COLORREF clrTextBk = ::GetSysColor(COLOR_WINDOW);

        CDC* pDC = GetDC();
        // Save dc state
        int nSavedDC = pDC->SaveDC();

        CRect rc;

        CHeaderCtrl* pHC;
        pHC = GetHeaderCtrl();
        if (pHC != NULL)
            CRect rcH;
            pHC->GetItemRect(0, &rcH);
   += rcH.bottom;
        } += 10;

        CString strText((LPCSTR)IDS_NOITEMS); // The message you want!

        pDC->FillRect(rc, &CBrush(clrTextBk));
        pDC->DrawText(strText, -1, rc, 
                      DT_CENTER | DT_WORDBREAK | DT_NOPREFIX | DT_NOCLIP);

        // Restore dc
    // Do not call CListCtrl::OnPaint() for painting messages


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Italy Italy
No Biography provided

You may also be interested in...

Comments and Discussions

Generaluseful idea Pin
CIDev24-Sep-10 5:56
memberCIDev24-Sep-10 5:56 
GeneralA non MFC version Pin
ineox24-Mar-10 3:37
memberineox24-Mar-10 3:37 
GeneralError Pin
Adi Narayana22-May-06 22:30
memberAdi Narayana22-May-06 22:30 
GeneralBugs Pin
Tim L18-Nov-05 10:24
memberTim L18-Nov-05 10:24 
GeneralUsing the default listview font and colors Pin
javrillon23-Jul-04 7:38
memberjavrillon23-Jul-04 7:38 
QuestionHow to use in a DLL Pin
LordLiverpool22-May-03 4:37
memberLordLiverpool22-May-03 4:37 
Generallistview adding mutiple colored row selection Pin
Anonymous2-Apr-02 10:16
memberAnonymous2-Apr-02 10:16 
GeneralPerhaps a better way... Pin
David Fleming7-Mar-02 12:19
memberDavid Fleming7-Mar-02 12:19 
GeneralRe: Perhaps a better way... Pin
Atlantys19-Sep-02 7:46
memberAtlantys19-Sep-02 7:46 
GeneralRe: Perhaps a better way... Pin
Stlan7-Oct-03 4:27
memberStlan7-Oct-03 4:27 
GeneralRe: Perhaps a better way... Pin
David Fleming7-Oct-03 7:18
memberDavid Fleming7-Oct-03 7:18 
GeneralRe: Perhaps a better way... Pin
Stlan7-Oct-03 20:20
memberStlan7-Oct-03 20:20 
Yes, it works when the routine is written in the OnPaint function (after Default()). I guess the lines are drawn during this default msg processing call.

But as you wrote, and I agree with you, it is a better practice to use OnEraseBkGrnd. So I wonder how it would work if one removes temporarily the style-ex LVS_EX_GRIDLINES each time the control enters the 'empty' mode, then to reset it again as soon there is some new item inserted.

GeneralRe: Perhaps a better way... Pin
Ron Olson16-Jun-04 6:31
sussRon Olson16-Jun-04 6:31 
GeneralRe: Perhaps a better way... Pin
David Fleming16-Jun-04 7:13
memberDavid Fleming16-Jun-04 7:13 
GeneralRe: Perhaps a better way... Pin
Ron Olson16-Jun-04 17:02
memberRon Olson16-Jun-04 17:02 
Generaltoo complicated Pin
Anonymous2-Mar-02 3:22
memberAnonymous2-Mar-02 3:22 
GeneralRe: too complicated Pin
Martijn18-Sep-03 3:28
memberMartijn18-Sep-03 3:28 
GeneralI can't get this code to work Pin
DanYELL24-Aug-01 15:48
memberDanYELL24-Aug-01 15:48 
Generalgot it working for a ClistView Pin
X23-Oct-00 16:21
sussX23-Oct-00 16:21 
QuestionHow does control get painted when the row count > 0??? Pin
Caleb15-Aug-00 16:58
sussCaleb15-Aug-00 16:58 
AnswerFound better example at Codeguru Pin
Caleb15-Aug-00 18:41
sussCaleb15-Aug-00 18:41 
GeneralSuggestion for Call Back List Control Type Pin
Murugan N.V.7-Jun-00 11:47
sussMurugan N.V.7-Jun-00 11:47 
GeneralDisabled ListCtrl Pin
Leo Davidson13-Jan-00 8:15
sussLeo Davidson13-Jan-00 8:15 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.151126.1 | Last Updated 12 Jan 2000
Article Copyright 2000 by GHINI Mauro
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid