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.
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.
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.
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.