ListView Coloured Headers Example

Monday Oct 13th 2003 by Ravi Kiran
Share:

This sample shows how to implement coloured listview headers using subclassing and custom-draw techniques. (Originally posted July 27, 1999.)

Listview Colored Headers

The Listview control of VB 5.0, doesn't let the header control have a colored header buttons. So this code lets you have it, by subclassing the listview and intercepting the header painting to achieve the effect.

Module : mLVClrHdr :

Implementation of Subclassing function and CustomDraw notification of Header control to get colored header elements.

Main Logic:

Step 1 : Subclass the ListView and listen for WM_NOTIFY message from its child ( which is the Header Control)

Step 2 : when you get CustomDraw notification, set the appropriate Colors into the DC, at appropriate painting stage ITEMPREPAINT

Step 3 : The actual paiting work is left for the Default procedure.

Future work: For exotic paiting, you can create a OwnerDraw header button(s) and handle WM_DRAWITEM . It is possible.

I am working on this presently (24/7/99), and shall post it on the Codeguru (VB) site, once it is ready.

This is an enhancement of Colored Listview Items example taken from the Codeguru (VB) site. The original example is by Chris Eastwood. I tried to retain most of the Code, as it is. His code uses a subclassing control, while this uses none. But you have to follow some compulsory steps, so as not to have your VB IDE crashed:-)

** Important & compulsory steps to use this code:

Step 1: Setup the subclass :

Call HooktoLV(listview1.hwnd,True), where listview1 is the Listview control that you want to subclass. Put this line in the Form_load procedure of the form that has this listview.

Step 2 : Set the Foreground and Background colors of the listview header buttons using global variables glHdrTextClr and glHdrBkClr Note that changes take effect only at the next painting cycle.

So, for dynamic changing, use listview.refresh to paint immediately.

Step 3 : Remove the subclass :

Call HooktoLV(Byval 0& , False)

Preffered point of calling this is in Form_QueryUnload. Form_Unload will also work.


Known Bugs : Only one, as far as i could test:

This code paints the header buttons *ONLY*. So if you have the buttons not covering the entire list view, the portion between the last button and listview right edge, still looks "Grey". So, Look for Chris' code elsewhere on Codeguru site to set the last button to occupy the whole of Client area till right-edge of the ListView.

Download Zipped Project File (12k)

Screen shot

Share:
Home
Mobile Site | Full Site
Copyright 2017 © QuinStreet Inc. All Rights Reserved