Prerequisites |
This method is intended for Visual Basic 5 or Visual Basic
6 where the Common Control library used is the MSComCtl 5 version (comctl32.ocx). Because the VB6-specific mscomctl.ocx (Common Controls 6)
is a complete implementation of comctl32.dll and not reliant on the version of comctl32.dll installed, this routine may not work when applied
to a listview created from the VB6-specific mscomctl.ocx.
Enhanced Comctl32 functionality is only available to users with
comctl32.dll version 4.70 or greater installed. This dll is typically installed with IE3.x or greater. |
|
There
may be occasions where a flat-looking listview column header suits the design of your application more that the standard default
button-style. By obtaining the handle to the header portion of the listview, and toggling its HDS_BUTTON style bits, the header takes
on a flat appearance. Setting the style to flat removes the functionality of ColumnHeader clicking - in fact the ListView1_ColumnClick event
will not occur with the flat style.
This example does not contain all code required to construct
the illustration shown. The routine provided here is designed to be applied to the project constructed through the ListView Demo, or
to an existing project utilizing a ListView control in report view. |
|
BAS
Module Code |
|
Place the following code into the general declarations
area of a bas module: |
|
Option Explicit
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Copyright ©1996-2011 VBnet/Randy Birch, All Rights Reserved.
' Some pages may also contain other copyrights by the author.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Distribution: You can freely use this code in your own
' applications, but you may not reproduce
' or publish this code on any web site,
' online service, or distribute as source
' on any media without express permission.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Const HDS_BUTTONS As Long = &H2
Public Const LVM_FIRST As Long = &H1000
Public Const LVM_GETHEADER As Long = (LVM_FIRST + 31)
Public Const GWL_STYLE As Long = (-16)
Public Const SWP_DRAWFRAME As Long = &H20
Public Const SWP_NOMOVE As Long = &H2
Public Const SWP_NOSIZE As Long = &H1
Public Const SWP_NOZORDER As Long = &H4
Public Const SWP_FLAGS As Long = SWP_NOZORDER Or _
SWP_NOSIZE Or _
SWP_NOMOVE Or _
SWP_DRAWFRAME
Public Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" _
(ByVal hwnd As Long, _
ByVal Msg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
Public Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" _
(ByVal hwnd As Long, _
ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" _
(ByVal hwnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Public Declare Function SetWindowPos Lib "user32" _
(ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
ByVal x As Long, ByVal Y As Long, _
ByVal cx As Long, ByVal cy As Long, _
ByVal wFlags As Long) As Long
|
|
Form
Code |
|
Add the following code to the Check1 checkbox on a form: |
|
Option Explicit
Private Sub Check1_Click()
Dim style As Long
Dim hHeader As Long
'get the handle to the listview header
hHeader = SendMessage(ListView1.hwnd, LVM_GETHEADER, 0, ByVal 0&)
'get the current style attributes for the header
style = GetWindowLong(hHeader, GWL_STYLE)
'modify the style by toggling the HDS_BUTTONS style
style = style Xor HDS_BUTTONS
'set the new style and redraw the listview
If style Then
Call SetWindowLong(hHeader, GWL_STYLE, style)
Call SetWindowPos(ListView1.hwnd, Form1.hwnd, 0, 0, 0, 0, SWP_FLAGS)
End If
End Sub
|
|
Comments |
Toggling Check1 removes/sets the flat header style.
The flat style still supports the addition of bitmaps. |
|