How Windows 3.11 Handled Custom Program Icons

In Microsoft Windows 3.11, custom icon assignments were managed through the Program Manager shell rather than an open desktop filesystem. Users customized shortcuts—known as "program items"—using the Program Item Properties interface, which mapped visual assets to specific executable paths. Windows 3.11 extracted icons directly from executables, shared resource libraries, or standalone icon files, permanently recording these visual associations inside binary group files (.GRP).

The Program Item Properties Interface

To assign a custom icon in Windows 3.11, users interacted with the Program Manager interface:

  1. Select the target program item inside a program group window.
  2. Open the properties dialog by pressing Alt + Enter or navigating to File > Properties.
  3. Click the Change Icon... button to launch the icon selection browser.

If the target executable contained embedded icon resources, the dialog displayed the primary icon by default. If the file lacked embedded graphics (common with MS-DOS applications), Windows automatically substituted a default generic icon from the Program Manager executable.

Supported File Types for Icon Sources

Windows 3.11 supported three main container types for retrieving icon graphics:

  • Standalone Icon Files (.ICO): Standalone graphics files containing standard 32x32 pixel bitmaps, typically limited to a 16-color palette matching standard VGA hardware configurations.
  • Executable Files (.EXE): New Executable (NE) format binaries containing an embedded resource table with one or more icon resources.
  • Dynamic Link Libraries (.DLL): Shared libraries commonly used as icon bundles.

The Role of PROGMAN.EXE and MORICONS.DLL

Because standard DOS utilities and early Windows tools often lacked built-in icons, Windows 3.11 shipped with centralized icon repositories:

  • PROGMAN.EXE: The shell executable itself housed a small collection of default system icons, such as generic program windows, filing cabinets, and document icons.
  • MORICONS.DLL: Located in the C:\WINDOWS directory, this file ("More Icons") contained dozens of pre-designed icons for popular third-party DOS software, such as WordPerfect, Lotus 1-2-3, and Harvard Graphics. When assigning an icon to a DOS executable, Windows 3.11 frequently pointed the file path directly to MORICONS.DLL.

When browsing a file containing multiple icons, the dialog allowed horizontal scrolling through the available resource index, numbering each icon sequentially starting at index 0.

Storage Mechanism: .GRP Files

Windows 3.11 did not store shortcuts as individual files on the disk (unlike the .LNK files introduced in Windows 95). Instead, all configuration data for a group window was written to a single binary file with a .GRP extension (such as MAIN.GRP or ACCESSOR.GRP) stored in the Windows directory.

When a user assigned a custom icon, Windows recorded two specific values within the program item's binary record inside the .GRP file:

  1. The icon resource path: A null-terminated string defining the absolute path to the .EXE, .DLL, or .ICO file.
  2. The icon index: An integer value referencing the specific offset or resource ID of the selected icon within that file.

During startup or window refresh operations, Program Manager read the .GRP files, loaded the referenced binary into memory, extracted the specified icon using the internal Windows API function ExtractIcon, and rendered the 32x32 graphic within the designated group window.