Click here to Skip to main content
Licence CPOL
First Posted 11 May 2003
Views 77,512
Bookmarked 60 times

CFilterHeaderCtrl and CFilterListCtrl - Give user a chance to filter data you brought him!

By | 11 May 2003 | Article
An owner drawn header control and a CListControl that uses it

Sample Image - FilterHeaderCtrl.jpg

Introduction

CListCtrl is my preferred control. Most of the times I use it in 'report' mode, because it's a pretty way to show 'rows of data' that user can easily scroll, sort, view. But often I need a way to let user choose, which data are meaningful for him. You see, there is a nice HDS_FILTERBAR on MSDN... but it was not there when I needed it! So, here is the CFilterHeaderCtrl, that you can use alone or within a CFilterListCtrl.

CFilterHeaderCtrl

This control is derived from a CHeaderCtrl and is owner drawn. Here you can see the notification messages fired from the control to the parent window:

#define    FLCN_FILTERCHANGING 101
#define    FLCN_FILTERCHANGED 102
#define    FLCN_SHOWINGEDIT 103
#define    FLCN_BEGINFILTEREDIT 104
#define    FLCN_ENDFILTEREDIT 105

FLCN_FILTERCHANGING and FLCN_FILTERCHANGED are called before and after a filter is changed by the user. Here you can prevent a filter change. The message handler will receive the following struct:

struct NMFILTERHDR : public NMHDR
{
    char* szText; // read only!!!
};

FLCN_SHOWINGEDIT is called when the edit control is about to be shown.

FLCN_BEGINFILTEREDIT and FLCN_ENDFILTEREDIT are called when the user start editing one or more filters, moving arount with the TAB key. In the sample code, you can see how to track how many filters have been changed and in that moment you can reload the list, without having to reload for every filterchange event.

For every column you add, you can choose one of the following styles:

#define FILTER_NONE                0
#define FILTER_ENABLED             1
#define FILTER_DISABLED            2

CFilterListCtrl

Instead of using the cFilterHeaderCtrl, you will find more useful to replace your CListCtrl with the CFilterListCtrl. The CFilterListCtrl will replace the standard header control with the CFilterHeaderCtrl and will forward to the parent, the notification messages.

Conclusion

I'm sure that you will find more answer to your questions looking around in the sample code. In the sample project you have to add your own code to reload the list!!!

Many many thanx to CodeProject and CodeGuru people for the many many articles on owner drawn and custom control implementation. Have fun!

License

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

About the Author

Massimiliano Conte

Software Developer (Senior)
Selex SI
Italy Italy

Member

Hi Smile | :)
I was born in 1970 (Augusta - Italy).
I live in Taranto - Italy.
I work in Taranto - Italy.
I like computer science!!!
That's all!

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
GeneralReload the List PinmemberOliverikawood18:51 7 Sep '10  
GeneralBig memory problems Pinmemberestartu_de1:23 8 Mar '04  
GeneralUse the Ctrl in an MDI-App Pinmemberreiser1:34 18 Feb '04  
GeneralFilter text problem PinmemberDavide Zaccanti3:20 10 Sep '03  
GeneralRe: Filter text problem PinmemberJonathanLivingstone3:38 10 Sep '03  
GeneralRe: Filter text problem PinmemberDavide Zaccanti20:48 15 Sep '03  
GeneralRe: Filter text problem PinmemberJonathanLivingstone23:39 17 Sep '03  
GeneralRe: Filter text problem PinmemberVivian De Smedt3:52 5 Aug '06  
GeneralWant to use the control Pinmemberajit070:53 27 May '03  
GeneralDefault filter string Pinmemberdgs20:24 23 May '03  
QuestionHow to change the default filter string Pinmembercarlos.sousa10:33 11 Oct '05  
GeneralThis is Good! PinmemberWREY4:57 13 May '03  
Generalcreative idea, so 5 ponits to you PinmemberZhefu Zhang8:27 12 May '03  

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

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

Permalink | Advertise | Privacy | Mobile
Web03 | 2.5.120517.1 | Last Updated 12 May 2003
Article Copyright 2003 by Massimiliano Conte
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid