Windows 95 Screen Resolution Changes Without Restart
Windows 95 introduced the ability to change screen resolutions
dynamically, eliminating the cumbersome system reboots required by
Windows 3.1. This capability was made possible by a redesigned graphics
architecture that integrated the 32-bit Graphics Device Interface (GDI),
dynamic display minidrivers, the ChangeDisplaySettings API,
and a broadcast messaging system that allowed running applications to
adapt to new display metrics on the fly.
The Limitations of Windows 3.1
In Windows 3.1, video drivers were monolithic 16-bit modules tightly
coupled to the system kernel. System metrics—such as desktop dimensions,
system font sizes, and device contexts—were established during the
initial boot sequence. Changing resolutions meant modifying system
initialization files (SYSTEM.INI) and loading a different
driver configuration, which necessitated a complete operating system
restart.
The DIB Engine and Display Minidrivers
Windows 95 overhauled this model by decoupling hardware-specific code from core rendering routines. It introduced a universal, highly optimized Device Independent Bitmap (DIB) engine that handled software rendering and 2D drawing.
Hardware vendors only needed to write lightweight "minidrivers" to interface with the hardware. These minidrivers could reset the video controller's hardware registers, change pixel clocks, and alter CRT timing parameters without unloading the core graphics subsystem.
The
ChangeDisplaySettings Win32 API
To coordinate the change, Windows 95 implemented the
ChangeDisplaySettings function into the Win32 API. When a
user selected a new resolution in the Display Properties control panel
(or via the QuickRes utility):
- Validation: The OS called the video driver to determine if the requested resolution, color depth, and refresh rate were supported by the hardware and monitor.
- Hardware Reconfiguration: The display driver reallocated the linear frame buffer and programmed the graphics adapter's digital-to-analog converter (RAMDAC) and CRT controller to the new mode.
- Internal Metric Updates: The GDI updated its internal desktop coordinates, clipping regions, and desktop window boundaries to reflect the new dimensions.
The WM_DISPLAYCHANGE
Message
Once the hardware shifted to the new resolution, Windows 95 informed
the running software environment. The operating system broadcasted the
WM_DISPLAYCHANGE message to every top-level window on the
desktop.
This message included the new horizontal resolution, vertical resolution, and color depth in its parameters. Applications adhering to Win32 standards intercepted this message to:
- Recalculate layout metrics.
- Reposition windows that fell outside the new desktop boundaries.
- Invalidate client areas to trigger a full repaint using
WM_PAINT.
Driver Support and Fallback
Dynamic resolution switching required explicit support within the display adapter's driver. If a computer used an older Windows 3.1 legacy driver or a generic VGA driver that lacked dynamic mode-switching routines, Windows 95 identified the limitation and defaulted to prompting the user for a restart before applying the new settings.