Re[7]: Загрузка иконок высокого разрешения - как ?
От: programmater  
Дата: 13.12.06 17:16
Оценка:
Здравствуйте, Аноним, Вы писали:


А>ну почему слабО ?

А>HINSTANCE по идее представляет собой загруженный модуль ?
А>Но если я его загружу (и это будет, скажем, DLL) — то не спровацирую ли я славшейшим образом вызов DLLEntry() ?
А>Этого хочется избежать, если честно.
Спровоцируешь. Если нужно избежать вызова DLLMain и загрузки всязанных DLL-ей, то единственный вариант — загрузка с флагом LOAD_LIBRARY_AS_DATAFILE. Далее в зависимости от требований твоей программы к системе. Если ориентируешься на Win2k и выше, то все ок, юзай LoadImage. Если же планируется использовать прогу на более ранних версиях, то тут начинается самое интересное. Придется собирать иконку самостоятельно. Здесь тебе помогут функции FindResource/LoadResource. Процесс в двух словах такой: сначала находишь RT_GROUP_ICON. Получаешь индекс интересующей тебя иконки (integer resource identifier) используя LookupIconIdFromDirectoryEx. Далее загружаешь этот ресусрс
FindResource(hLoadedAsDataFileModule , RT_ICON , ResourceIndex);

Далее зовешь CreateIconFromResource(Ex) для создания иконки из этого ресурса.
Точного кода приводить не буду, т.к. лень проверять. Такой вариант годится в том случае, если ты знаешь точный размер нужной тебе иконки (иначе функция LookupIconIdFromDirectoryEx вернет тебе нулл). В качестве альтернативы можешь вручную распарсивать RT_GROUP_ICON. Это не так уж сложно. Под рукой документации нет, а то привел бы примерчик, как это делать. Плюс в том, что ты сам выбираешь наиболее "понравившуюся" иконку (например, самую большую).Но в любом случае это проще, чем выковыривать из заголовка PE-файла. Хотя для тренировки можно и этим заняться — тоже ничего сверхъестественного . В любом случае удачи.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.