Hmmmm I think I have a way of doing this, although im not entirely sure I can get the icons to stay when dragging....
The dragging, real easy... Hook the list box window, and get the window boundaries, then test which item we are over with the mouse using API, then while we are in Mouse_down, we just update the list when we drag up or down, changing the list index of the one we were over.
The icons I would do using a hook to the listwindow, steal the msg's sent to it by windows, and use our own wndProc to control the redraw on the window, then its a case of every WM_PAINT or WM_REDRAW message, we use the API function of DrawIconEX with the listbox HDC, draw your icon, then manually put the text in. Throw any other messages that dont involve the draw back to the API, and away we go...
Hmmmm, nothing ever turns out that simple tho does it?