файл .ICO содержит несколько изображений. но HICON - это только один из этих изображений. если вы используете LR_DEFAULTSIZE, то может быть какое-то магическое поведение, которое сохраняет ссылку на файл .ico и использует соответствующее изображение из него, но я сомневаюсь в этом.
Если этого не сделать, то ничего не получится.
HICON hicon = LoadImage(NULL, "filename.ico", IMAGE_ICON,
0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE);
Немного фона.
Когда файл .ico включен в ресурсы приложения, файл открывается и каждый образ из файла становится отдельным ресурсом. Заголовок файла изменяется, и он становится ресурсом ICON. Поэтому, когда LoadIcon / LoadImage передается идентификатор ресурса ресурса ICON, ему действительно передается каталог других ресурсов. Он выбирает изображение, которое соответствует запросу в этот момент времени , и превращает его в HICON. Функция, которая фактически делает это, называется LookupIconIdFromDirectory
Вот почему, когда вы GetIconInfo для HICON, вы получаете только одну структуру ICONINFO.
typedef struct _ICONINFO {
BOOL fIcon;
DWORD xHotspot;
DWORD yHotspot;
HBITMAP hbmMask;
HBITMAP hbmColor;
} ICONINFO;