Finding which items are selected in a List View
by Richard Russell, September 2010
A significant difference between a List View and a List Box is that the former allows you to select multiple items whereas the latter only allows you to select a single item. This complicates somewhat the issue of discovering which item(s) is/are selected.
With a List Box you can simply send the LB_GETCURSEL message:
SYS "SendMessage", hListBox%, LB_GETCURSEL, 0, 0 TO sel%
where sel% is set to the index of the current selection (or -1 if no item is selected).
With a List View you can optionally discover how many items are selected as follows:
SYS "SendMessage", hListView%, LVM_GETSELECTEDCOUNT, 0, 0 TO nsel%
where nsel% is set to the number of selected items.
To find which item(s) is/are selected you can send the List View the LVM_GETNEXTITEM message:
iStart% = -1 SYS "SendMessage", hListView%, LVM_GETNEXTITEM, iStart%, LVNI_SELECTED TO index%
where index% is set to the index of the first item selected (or to -1 if no items are selected).
To discover which other items (if any) are selected send the message repeatedly with iStart% set to the index previously returned, until index% is -1:
iStart% = -1 REPEAT SYS "SendMessage", hListView%, LVM_GETNEXTITEM, iStart%, LVNI_SELECTED TO index% IF index% <> -1 THEN PROC_do_something(index%) iStart% = index% UNTIL index% = -1
Use the Windows Constants utility or API Viewer to discover the values of the constants.