On Saturday, 12 May 2012 at 15:57:37 UTC, John Chapman wrote:
Yup, they do what C# does with the constructor: they put make
a *separate* function, createHandle(), used to create the
control.
And they simply *don't* tie the destructor to DestroyWindow();
instead, they just assume the user will call dispose().>
So in other words, they just ignored the entire problem with
the lifetimes, and hoped ("required"?) that the user will call
dispose().
Actually, in WinForms, closing the application's main Form
triggers its Dispose method, which disposes of child Controls
too.
Yes, that's not a WinForms thing -- when you close a window, it's
trivial to have DestroyWindow() get called too.
The trouble is that you can't rely on this to avoid handle leaks
-- for example, message-only windows are invisible, so their
handles can get leaked and they can never be closed.