Auto-size columns for virtual list view controls is performed using all the items that are visible at the time the auto-size operation is actioned. That is the behaviour of the Delphi TListView
control. Try performing the same operation in explorer and you can readily see that this is the operating system standard.
When you operate a list view in non-virtual mode, the contents of all rows are accounted for when performing auto-size.
I'm not sure why you observe the auto-size only accounting for the first row of data. If that is really what is happening for you then I think there must be something wrong in your code that we would need to see.
Your problem appears to be a Windows XP bug. Virtual list views do not perform auto-resize correctly on XP so far as I can see. I think that explorer switched from non-virtual to virtual between XP and Vista and I wouldn't mind betting that the explorer team had enough internal leverage to get the problem fixed.
So far as I am aware you are not notified that an auto-size is taking place so I think it could be difficult for you to workaround the problem. If you want to pursue this further then you could attempt to respond to the HDN_DIVIDERDBLCLICK
notification for the header control and list for CTRL +. However, I'm not sure whether that approach would yield any joy.