Window-owning controls and non-window-owning controls

Controls are similar to windows in the Window Server in that they are both bounded areas of the screen and both user interface elements. They are not synonymous, however, as a control may take up the whole of a window’s area or only part of it. For this reason controls are divided into two types: window-owning controls and non-window-owning controls.

Window-owning controls

A window-owning control has the same size and position as a window in the Window Server. Window-owning controls may overlap each other and may be moved around the screen within the bounds of their parent window. Dialogs, menus, toolbars and top-level controls are typically window-owning controls.

Non-window-owning controls (lodger controls)

The majority of controls are non-window-owning. A non-window-owning control’s extent typically covers only part of a window on the screen: usually it is one of a number of controls within a larger compound control which acts as a container.

Examples of non-window-owning controls include command buttons, text boxes and labels.

Non-window-owning controls give greater efficiency as they require fewer resources in the Window Server and fewer process switches. They can also result in faster intialisation and redrawing because a compound control and all its non-window-owning components can be drawn with a single flush to the window server.

Associated windows

All controls have an associated window, whether they are window-owning or not. For a window-owning control the associated window is the window it owns. For a non-window-owning control the associated window is the window owned by the nearest window-owning control above it in the control hierarchy.