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):

  1. 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.
  2. 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.
  3. 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.