See the question and my original answer on StackOverflow

If you use the LVS_REPORT style, the list view control looks like a grid control.

In this case, items are stored in column 0 and sub items represent what's stored in other columns (there is not a whole concept such as a "cell"). So, the subitem index is notably used with the LVM_SETITEM and LVM_GETITEM messages (or with corresponding ListView_SetItem and ListView_GetItem macros), to write or read column X text value for example. Depending on index you access the item, if iSubItem == 0, or a subitem, if iSubItem >= 1.

You can have a look at this question here on SO for extra sample: Items and Subitems in List-View control