Windows 3.11 Window Layering and Z-Order Explained
Microsoft Windows 3.11 managed desktop window layering through a
depth-based queue known as the Z-order, maintained by the core 16-bit
USER module (USER.EXE). By utilizing a linked list of
window handles, the operating system organized overlapping application
windows, dialog boxes, and child controls along an imaginary visual axis
perpendicular to the screen. Through a combination of hierarchical
parent-child boundaries, specialized window styles like "Always on Top,"
and strict graphical clipping, Windows 3.11 ensured that active windows
stayed in foreground focus while background windows were properly
occluded.
The Z-Order Linked List
At the system level, USER.EXE maintained the visual
stack as a doubly linked list of window handles (HWND).
Each entry in this list represented a window on the desktop. The window
at the head of the list was positioned at the very top of the visual
stack, directly beneath the user's cursor, while the window at the tail
sat at the very bottom, resting just above the desktop background
window.
When Windows 3.11 needed to determine which window should receive mouse clicks or which borders should obscure others, it traversed this linked list from top to bottom.
Top-Level vs. Child Window Hierarchies
Windows 3.11 categorized windows into strict visual hierarchies that governed how layering rules were applied:
- The Desktop Window: The root window of the system, always pinned at the absolute bottom of the Z-order.
- Top-Level Application Windows: Main program windows that could be dynamically reordered relative to each other on the desktop.
- Child Windows: Buttons, scrollbars, text fields, and Multiple Document Interface (MDI) child frames. A child window's layering order was strictly confined to the bounds and clipping region of its parent window. A child could never appear above its parent in the global desktop order, nor could it render outside its parent's client area.
Normal vs. Topmost Bands
With the introduction of the WS_EX_TOPMOST extended
window style in the Windows 3.x series, the operating system split the
single Z-order list into two distinct conceptual tiers or "bands":
- Topmost Windows: Windows assigned the
HWND_TOPMOSTattribute (such as the Clock set to "Always on Top" or floating utility palettes) were placed in the upper band. These windows always rendered in front of all standard applications, regardless of which window held input focus. - Normal Windows: Standard application and utility windows occupied the lower band.
When a standard window was activated, it moved to the top of the normal band, but it could never rise above any window residing in the topmost band.
Activation and Z-Order Manipulation
The visual layering order changed in response to user input or
application programming interface (API) calls. When a user clicked on an
inactive background window, Windows generated mouse and activation
messages (WM_LBUTTONDOWN, WM_ACTIVATE).
The operating system adjusted the linked list by detaching the target
window's node and re-inserting it at the head of its respective band.
Developers could also programmatically control this behavior using
16-bit API functions such as BringWindowToTop(),
SetActiveWindow(), and the versatile
SetWindowPos(), which allowed precise insertion before or
after specific sibling window handles.
Clipping and the Paint Cycle
Layering was graphically enforced through cooperation between the
USER module and the Graphical Device Interface (GDI.EXE).
Windows 3.11 calculated visible regions using clipping algorithms.
When a window higher in the Z-order overlapped a lower window, GDI
subtracted the overlapping area from the lower window’s clipping region.
This prevented the occluded window from drawing over the foreground
window during background processing. When a top window was moved,
resized, or closed, Windows 3.11 invalidated the previously covered
area, marked it as an "update region," and dispatched a
WM_PAINT message to the newly exposed window to redraw only
the newly visible pixels.