views:

1788

answers:

3

In Win32 programming, what is the difference between a window's parent and a window's owner? I thought I had it figured out, then I came across this code:

SetWindowLong(handle, GWL_HWNDPARENT, foo);

This actually sets the window's owner, not the parent - despite the GWL_HWNDPARENT being used. Are the terms parent/owner interchangeable, or is there actually a difference?

+4  A: 

Owner is the Window* responsible for a control or dialog (for example, responsible for creating/destroying the window).

Parent is the next-senior window* to a control or dialog in the window chain, but isn't actually responsible for it (doesn't necessarily care about its lifecycle, etc). A window's parent can also be its owner.

*Window vs window: Window is an actual window displayed on the screen; window is any object with a HWND (includes buttons, panels, etc).

DannySmurf
Thanks for the window vs window tip as well - sometimes these things get a bit confusing when trying to discuss with other people.
Jon Tackabury
+3  A: 

Ownership is a relationship between two top level windows while Parent is a relationship between a top level and a WS_CHILD, or a WS_CHILD and another WS_CHILD.

The parent of a button is the form it is on, while a message box is owned by the form that showed it.

Read this article from Microsoft Win32 Window Hierarchy and Styles to get a much clearer understanding of Ownership, Parenting, ZOrder, SetWindowLong, GetWindow and all the other nasty bits of the Win32 api for creating window relationships.

Mo Flanagan
A: 

Explained fully on msdn

Danra