In this question, Remy said in a comment that:
the HWND provided by the TWinControl.Handle property is not persistent. It can get destroyed and recreated during a component's lifetime, even multiple times. Every time the TShellListView gets a new HWND assigned, you have to call DragAcceptFiles(TRUE) again. Overriding CreateWnd() allows you to do that. For good measure, you should also override DestroyWnd() to call DragAcceptFiles(FALSE) before the HWND is destroyed.
I wasn't aware of that until now and I want to understand the mechanism that destroy and recreate the HWND. What are the cases when this is happening and why ?