This really is an application-specific problem. Explorer's ListView (the common control 6 ListVew32) uses a system image list and many, many other things to query files type handlers for a certain interface (IThumbnailCapture) which returns an image that it stores in a cache (in this case, a hidden system file named thumbs.db). For your application, you could do something similar, although using the default controls leave much to be desired (not everything from Windows' common controls is wrapped in the .NET equivalents). Get thumbnails for your ListViewItems, add them to the ListView's LargeImageList property, and then set the appropriate ListViewItems' ImageIndex property to the index in which the thumbnail was inserted. In effect, these become the icons for the ListViewItems. Unfortunately, if you want the thumbnail view that Explorer boasts, it won't be an easy task. First, you must make sure your application is bound to common controls 6 (in .NET 1.1, call Application.EnableVisualStyles before calling Application.Run in your program's entry point, Main), or use a manifest file (see my article list for an article that describes it). Then you'll have to P/Invoke lots of Win32 native functions and override a lot of functonality. Not fun. :( I hope at least I gave you some idea of what Explorer does for the functionality you want. Again, though, it's really up to you about how to do it since you control the code in your app.
-----BEGIN GEEK CODE BLOCK----- Version: 3.21 GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++ -----END GEEK CODE BLOCK-----