iGrok писал(а):ExtractIcon, по-моему, возвращает всё-таки не группу, а просто HICON.
Если при вызове ExtractIcon последним параметром передавать 0хFFFFFFFF то ф-ция возвращает количество групп иконок. Проверял на разных файлах, всегда возвращает правильное количество групп, такое-же какое показывают редакторы ресурсов. В дальнейшем при вызове ExtractIcon с последним параметром содержащим номер группы, начиная с нуля, ф-ция возвращает дескрипторы. Но вот вопрос что за дескриптор она возвращает? Толи дескриптор группы, то ли действительно из группы выбирает наиболее подходящий значок и возвращает его дескриптор тут не очень понятно, но все таки хотелось бы знать это точно.
Полученные этой функцией дескрипторы пробовал применить с DrawIcon, для рисования значков на форме, все рисует корректно. Но опять же непонятно то ли DrawIcon используя готовый дескриптор отдельного значка просто рисует его в указанный контекст, либо все таки в зависимости от данного контекста сама выбирает нужный значок из группы, дескриптор которого был передан. С одной стороны логично, что именно DrawIcon производит выборку, так как именно она знает в отличии от ExtractIcon, с каким контекстом предстоит работать, но с другой стороны в описании ExtractIcon речь идет о значке, но ни как не о группе. Или группа значков для разных режимов отображения это и есть значок? Тогда, что такое группа?
Пока искал ответы на свои вопросы нашел такую информацию:
Когда система показывает на экране значок, она должна извлечь соответствующее изображение значка из .exe или .dll файла. Система использует нижеследующие шаги, чтобы выбрать изображение значка:
Выбирирается ресурс RT_GROUP_ICON. Если существует более чем один такой ресурс, Windows NT Microsoft / Windows 2000/Windows XP используют первый ресурс, перечисленный в сценарии ресурса, в среде Windows 95/Windows 98/Windows Millennium Edition (Windows ME) выбирается первый ресурс, перечисленный в алфавитном порядке.
Выбирается соответствующее изображение RT_ICON из ресурса RT_GROUP_ICON. Если существует более чем одно изображение, система использует нижеследующие критерии, чтобы выбрать изображение:
Изображение, самое близкое к затребованному выбором размеру.
Если присутствуют два или больше изображения одного и того же размера, выбирается тот, который соответствует насыщенности цвета дисплея.
Если нет изображения точно соответствующего насыщенности цвета дисплея, выбирается изображение с самой большой насыщенностью цвета, которая не выходит за пределы насыщенности цвета дисплея. Если все они выходят за пределы насыщенности цвета, выбирается изображение с самой нижней насыщенностью цвета. Обратите внимание! на то, что система обрабатывает все насыщенности цвета 8 bpp или больше как равные. Поэтому, нет никакого преимущества включения изображения 16x16 с 256 цветами и изображения 16x16 с 16 цветами в том же самом ресурсе — система просто выберет первый, с которым она встретится. Когда дисплей находится в режиме 8-bpp, система предпочтет значок с 16 цветами значку с 256 цветами и покажет на экране все значки, используя системную палитру по умолчанию.