Hi,
currently Wine's SHDoDragDrop is a stub and the comment states that it probably is equivalent to DoDragDrop. That's not quite true. In one of my programs I passed a NULL drop source accidentally and to my surprise it worked. So SHDoDragDrop creates an IDropSource object for you if you don't pass one. I've also found out, that on Vista SHDoDragDrop does the drag-image generation for you if you pass a NULL hWnd to SHDoDragDrop.
While the hWnd thing works only if the dragged data object describes shell items, the IDropSource thing works for any dragged data.
HTH Timo