|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Visual Basic Common Control API
Routines SendMessage: Toggling TreeView Check Box Visibility |
||
Posted: | Friday September 17, 1999 | |
Updated: | Monday December 26, 2011 | |
Applies to: | VB4-32, VB5, VB6 using comctl32.ocx | |
Developed with: | VB5, Windows 98 | |
OS restrictions: | None | |
Author: | Brad Martinez | |
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. Visual Basic 6 users have extended functionality built-in to the newer mscomctl32.ocx, which does not rely on the Windows comctl32.dll. This code is targeted towards users opting for the older comctl32.ocx using comctl32.dll. |
|
So
now that the ability to display checkboxes has been added to the application (SetWindowLong: Add TreeView Check Boxes via API), there may be times when it is desirable to hide this functionality. Simply resetting the TVS_CHECKBOXES flag does not do this, as
the state image icons are still attached to the treeview.
Brad Martinez demonstrates here how to "remove" the checkboxes, and the requisite destruction of the associated imagelist that was created to display the checkboxes. This code can be added to a new or existing project. The demo pictured here is created from the above link; this only adds the additional display/hide functionality. |
BAS Module Code |
This code duplicates some of the API and constant declarations found in SetWindowLong: Add TreeView Check Boxes via API ; it is unnecessary if these are already in your project. |
|
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. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'Brad Martinez, http://www.mvps.org/btmtz/ Public Const TVS_CHECKBOXES As Long = &H100 '>= IE3 Public Const TV_FIRST As Long = &H1100 Public Const TVIF_STATE As Long = &H8 Public Const TVIS_STATEIMAGEMASK As Long = &HF000 Public Const TVM_GETIMAGELIST = (TV_FIRST + 8) Public Const TVM_SETIMAGELIST = (TV_FIRST + 9) Public Const TVSIL_NORMAL As Long = 0 Public Const TVSIL_STATE As Long = 2 Public Declare Function ImageList_Destroy Lib "comctl32" _ (ByVal hIml As Long) As Boolean Public Const GWL_STYLE As Long = (-16) Public Declare Function GetWindowLong Lib "user32" _ Alias "GetWindowLongA" _ (ByVal hWnd As Long, _ ByVal nIndex As Long) As Long |
Form Code |
To the form containing the treeview (Treeview1), add a command button (Command1) and the following code: |
|
Option Explicit Private hwndTV As Long Private Sub Form_Load() hwndTV = TreeView1.hWnd End Sub Private Function SetTVStyle(hwndTV As Long) As Boolean Dim dwStyle As Long dwStyle = GetWindowLong(hwndTV, GWL_STYLE) If dwStyle And TVS_CHECKBOXES Then 'destroy the imagelist Call TVRemoveStateImagelist(hwndTV) 'remove the check state bit SetTVStyle = CBool(SetWindowLong(hwndTV, _ GWL_STYLE, _ dwStyle Xor TVS_CHECKBOXES)) Else 'add the check state bit. The control will 'create the required state imagelist SetTVStyle = CBool(SetWindowLong(hwndTV, _ GWL_STYLE, _ dwStyle Or TVS_CHECKBOXES)) End If End Function Private Sub Command1_Click() 'toggle the display of the checkboxes Call SetTVStyle(hwndTV) End Sub Private Function TVRemoveStateImagelist(hwndTV As Long) As Boolean Dim hIml As Long 'Setting TVS_CHECKBOXES creates a state imagelist, 'removing this bit but doesn't remove and 'destroy the imagelist from the treeview. 'This requires a call to ImageList_Destroy hIml = SendMessage(hwndTV, _ TVM_SETIMAGELIST, _ TVSIL_STATE, _ ByVal 0&) If hIml Then TVRemoveStateImagelist = ImageList_Destroy(hIml) End Function |
Comments |
Pressing the Toggle button will display or hide the
checkboxes.
Note however that hiding the checks also destroys the imagelist, and that subsequent displaying of the checkboxes will cause all to appear unchecked again. If it is necessary for your application to maintain the checked status of individual items when removing the checkboxes, your app is responsible for tracking those items selected, then reinstating the checks on the subsequent showings. |
|
|
|
|||||
|
|||||
|
|||||
Copyright ©1996-2011 VBnet and Randy Birch. All Rights Reserved. |