TvwState.exe Simulates Multiple-Selection TreeView Ctrl (125587)
The information in this article applies to:
- Microsoft Platform Software Development Kit (SDK) 1.0
This article was previously published under Q125587 SUMMARY
The TvwState.exe sample demonstrates how to simulate a multiple-selection
TreeView control. The Windows 95 TreeView control does not support multiple
selection. If you want a multiple-selection TreeView, you can use state
images to simulate it in your application.
The TVWSTATE sample accomplishes this by using a checkbox type of state
image to indicate that the item is selected or cleared (de-selected). These
checkboxes will retain their state even if the TreeView loses focus.
MORE INFORMATIONThe following file is available for download from the Microsoft Download Center:
For additional information about how to download Microsoft Support files, click the following article number to view the article in the Microsoft Knowledge Base:
119591 How to Obtain Microsoft Support Files from Online Services
Microsoft scanned this file for viruses. Microsoft used the most current virus-detection software that was available on the date that the file was posted. The file is stored on security-enhanced servers that help to prevent any unauthorized changes to the file.
The multiple-selection TreeView control simulation is implemented by
setting the state image list of the TreeView control to an image list that
contains the checked and unchecked checkbox bitmaps. This image list is set
by using the TVM_SETIMAGELIST message with lParam == TVSIL_STATE (see
InitImageList in TVWSTATE.C). A TreeView control can have two image lists,
a normal image list and a state image list. In the TreeView, the display
order from left to right is: the expansion button, the state image (if
present), the normal image (if present), and then the item text.
When processing the WM_NOTIFY message where (LPNMHDR)lParam->code ==
NM_CLICK (see MsgNotifyTreeView in TVWSTATE.C), the code checks to see if
the user clicked the left mouse button in the checkbox. If this is the
case, the state image index of the item is retrieved, the index is toggled
between the checked and unchecked image list items, and then the new index
is saved.
The state image index identifies which member of the state image list
should be displayed. The state image index is stored in bits 12-16 of the
item state value. Either TVIS_STATEIMAGEMASK or TVIS_USERMASK can be used
to mask off the lower bits. To access just the state image index, use a
statement similar to this:
StateIndex = tvi.state & TVIS_STATEIMAGEMASK;
The INDEXTOSTATEIMAGEMASK macro offsets a value to the correct bits for the state image index. This is accomplished by shifting the given value left 12 places. If the desired state image index is 1, the state can be set using a statement similar to this:
tvi.state = INDEXTOSTATEIMAGEMASK(1);
This sample can also be modified to implement selection methods similar to
those of an extended-selection listbox where the user uses the SHIFT key to
select a range of items and/or the CTRL key to select or clear individual
items.
Modification Type: | Minor | Last Reviewed: | 7/8/2005 |
---|
Keywords: | kbdownload kbCtrl kbfile kbinfo kbsample kbTreeView KB125587 |
---|
|