Извлечение иконок ... больших

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Извлечение иконок ... больших

Сообщение Alexanbar » 17.12.2006 (Вс) 20:05

К сожалению, ExtracticonEx, ShGetFileInfo позволяют извлекать иконки только 16х16 и 32х32, а мне нужно 48х48 хотя бы. Вроде бы для этой цели нужно использовать LoadImage.

Код: Выделить всё
Sz=48
hInst& = LoadLibrary("c:\program files\internet explorer\iexplore.exe")
hl& = LoadImageBynum(hInst, 32529, IMAGE_ICON, Sz, Sz, LR_DEFAULTCOLOR)
DestroyIcon hl
FreeLibrary hInst


Всё бы хорошо, но как узнать номер иконки, который нужно ввести (в коде - это 32529).
В реестре, например, в качестве DefaultIcon для к-л файла указывается не тот номер, который нужен для LoadImage, а просто порядковый номер иконки (1,2....).

Иными словами, нужна функция, которая из 1 сделает 32528 (числа взяты для IE).

lister
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 389
Зарегистрирован: 15.01.2005 (Сб) 7:34
Откуда: Страна оления

Сообщение lister » 17.12.2006 (Вс) 22:37

А если пойти другим путем:

1) ImageList_Create (48x48xColourDepth)
2) ExtractIcon или ExtractAssociatedIcon
3) ImageList_AddIcon
4) ImageList_Draw или ImageList_DrawEx

Кстати, в Висте иконки 256х256. Пора и к ним готовиться :)

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 17.12.2006 (Вс) 23:31

Дело в следующем. ExtractIconEx может выдать hIcon только для иконок 16х16 или 32х32.
Отрисовать можно иконки любого размера. Скажем, иконку 32х32 ратянуть на 48х48.
А я хочу, чтобы иконка была нормальная, т.е. та, что есть в ресурсе (если есть), а не растянутая.
Похоже, нужно перечислить все иконки с помощью EnumResourceName, и запомнить номер иконки с заданным порядковым номером.
Может быть, есть другие варианты?

lister
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 389
Зарегистрирован: 15.01.2005 (Сб) 7:34
Откуда: Страна оления

Сообщение lister » 17.12.2006 (Вс) 23:49

А я говорю про простую ExtractIcon (без Ex)
Хотя... надо проверять. Точно не помню, что она вернет...

---
Проверил. Возвращает 32х32. До 48х48 - растягивает
Наверное, действительно через EnumResourceName

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 18.12.2006 (Пн) 0:46

ExtractIcon вернёт хэндл одной иконки(не помню, 32х32 или 16х16 )


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 108

    TopList