"Имея указанную выше инфраструктуру и поддерживая самые сложные из всех ресурсов, структуры ресурсов версий, можно расширить библиотеку до одного из двух десятков других известных типов ресурсов. Мы начали с значков.
Расширение библиотеки для поддержки значков означает реализацию структур данных для хранения значков и подключение обратных вызовов ResourceInfo. Когда ResourceInfo обнаруживает ресурс типа 14 (RT_GROUP_ICON), он создает объект типа IconDirectoryResource. Последний создает IconResource, который загружает DeviceIndependentBitmap.
• IconDirectoryResource представляет RT_GROUP_ICON, набор ресурсов значков.
• IconResource представляет один значок RT_ICON с одним или несколькими изображениями.
• DeviceIndependentBitmap - это не ресурс, а необработанные данные, внедренные в файл со смещением, определяемым ресурсом значка, и представляют собой растровое изображение одного значка в формате .bmp.
Чтобы встроить существующий значок из файла .ico в исполняемый файл (.exe или .dll), мы загружаем файл .ico и преобразуем его в IconDirectoryResource. Структура в .ico-файле аналогична структуре иконки в исполняемом файле. Единственное отличие состоит в том, что исполняемые заголовки хранят идентификатор значка, тогда как заголовок .ico содержит смещение данных значка. См. Классы IconFile и IconFileIcon для деталей реализации. IconDirectoryResource записывается в целевой файл, затем каждый ресурс значка записывается отдельно. Обратите внимание, что текущая реализация заменяет значки с тем же Id в исполняемом файле, но не удаляет старые значки, если вы храните меньше значков изображений, чем предыдущее число, - вероятно, это следует делать, поскольку эти значки становятся осиротевшими.
Простота расширения библиотеки до значков подтвердила нашу первоначальную модель проектирования. "
Взято из ссылки Ранхиру Курая для удобства просмотра. Кредит идет к нему.