It's the next evolution of using the list control
1) The first is just copying the data into the control
2) The next is getitemdataptr/setitemdataptr (items are still copied into the control, but a pointer is maintained to point back to the list item)
3) The 3rd is a virtual list control where no data is copied into the control - instead there is a callback to retrieve the data directly from a list.
I'm actually not trying to answer the OP's problem directly (I think that's been done). I'm trying to show essentially that there is more out there. Virtual list controls are kind of like the binding in modern (meaning, non-MFC or QT frameworks). I found it helpful to have understood virtual controls - it helped me understand data binding later on.

