Visual Basic Common Control API Routines
SendMessage: ListView Subitem Icons
     
Posted:   Saturday March 1, 1997
Updated:   Monday December 26, 2011
     
Applies to:   VB4-32, VB5, VB6
Developed with:   VB4-32, Windows 95
OS restrictions:   None
Author:   VBnet - Randy Birch
     
 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.


In perhaps the strangest (and most useless) of extended example, this code adds to each subitem the same icon displayed as the main item icon. I have yet to determine how (or if) a subitem-specific icon can be shown instead of duplicating the main item icon, or frankly, why one would ever want this clutter.

This example does not contain all code required to construct the illustration shown. The routine provided here is designed to be applied to an existing project utilizing a ListView control with subitems.

 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 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 Const LVM_FIRST As Long = &H1000
Public Const LVM_SETEXTENDEDLISTVIEWSTYLE As Long = (LVM_FIRST + 54)
Public Const LVM_GETEXTENDEDLISTVIEWSTYLE As Long = (LVM_FIRST + 55)

Public Const LVS_EX_FULLROWSELECT As Long = &H20
Public Const LVS_EX_GRIDLINES As Long = &H1
Public Const LVS_EX_CHECKBOXES As Long = &H4
Public Const LVS_EX_HEADERDRAGDROP As Long = &H10
Public Const LVS_EX_TRACKSELECT As Long = &H8
Public Const LVS_EX_ONECLICKACTIVATE As Long = &H40
Public Const LVS_EX_TWOCLICKACTIVATE As Long = &H80
Public Const LVS_EX_SUBITEMIMAGES As Long = &H2
 Form Code
Add a check button to the project (Check1) with the caption "SubItem Images". Set its initial value to 0. Add the following code to the check button sub:

Option Explicit

Private Sub Check1_Click()

   Dim state As Long
 
  'state will be true when the checkbox
  'style is 1 (checked) or False when
  'unchecked
   state = Check1.Value = 1
 
  'set the new listview style
   Call SendMessage(ListView1.hwnd, _
                    LVM_SETEXTENDEDLISTVIEWSTYLE, _
                    LVS_EX_SUBITEMIMAGES, ByVal state)

   ListView1.Refresh

End Sub
 Comments
The icons for subitems are only displayed and removed on a refresh of the ListView after changing the extended bit.

 
 

PayPal Link
Make payments with PayPal - it's fast, free and secure!

 
 
 
 

Copyright 1996-2011 VBnet and Randy Birch. All Rights Reserved.
Terms of Use  |  Your Privacy

 

Hit Counter