Ситуация такая: в программе нужно использовать стандартные иконки файлов и т.д. (все, что встречаются, например, в списке каталогов проводника). Как это программно сделать?
Вариант "вырезать и вставаить себе" не подходит.
Здравствуйте Igrushkin Alexandr Leonidovitch, Вы писали:
IAL>Ситуация такая: в программе нужно использовать стандартные иконки файлов и т.д. (все, что встречаются, например, в списке каталогов проводника). Как это программно сделать? IAL>Вариант "вырезать и вставаить себе" не подходит.
Здравствуйте VVV, Вы писали:
VVV>Здравствуйте Igrushkin Alexandr Leonidovitch, Вы писали:
IAL>>Ситуация такая: в программе нужно использовать стандартные иконки файлов и т.д. (все, что встречаются, например, в списке каталогов проводника). Как это программно сделать? IAL>>Вариант "вырезать и вставаить себе" не подходит.
VVV>Посмотри здесь: VVV>http://msdn.microsoft.com/code/default.asp?url=/msdn-files/026/001/876/FileType/Source%20Files/FileIcon_cpp.asp
Здравствуйте Igrushkin Alexandr Leonidovitch, Вы писали:
IAL>Предложенные варианты годятся для извлечения иконок файлов, а, например, иконку "Сетевое окружение" как извлечь?
Здравствуйте Igrushkin Alexandr Leonidovitch, Вы писали:
IAL>Ситуация такая: в программе нужно использовать стандартные иконки файлов и т.д. (все, что встречаются, например, в списке каталогов проводника). Как это программно сделать? IAL>Вариант "вырезать и вставаить себе" не подходит.
Виндовоз подбирает иконку, насколько я понял, из следующих соображений:
если
— это двоичный файл, то он
1) просматривает его ресурсы — берёт иконку с минимальным идентификатором(проверено);
2) если иконок нету то выбирает иконку в соответствии с расширением файла из своей регистрационной базе;
— иначе смотри пункт 2).
База соответствий (иконки к типу файла) лежит бысрее всего в реестре.
Системные иконки лежат в shell32.dll, их вытянуть легко
кроме сетевого окружения нужно вытащить иконки типа "домен", "вся сеть" и др.
сетевых ресурсов(набираются с пом. WNetEnumResource)
ладно, с чего все началось.
нужно было написать свой класс(виндовского контрола соответствующего я не нашел)
для отображения дерева каталогов
виндовские стандартные аналоги — диалог выбора каталога(вызывается
с пом. апишной функции) или в проводнике (может есть еще)
все иконки каталогов/файлов легко вытаскиваются с пом. SHGetFileInfo
а вот иконки ентих самых сетевых ресурсов я не смог корректно вытащить
Здравствуйте Igrushkin Alexandr Leonidovitch, Вы писали:
IAL>Здравствуйте VVV, Вы писали:
VVV>>Попробуй так: VVV>>LPITEMIDLIST pidl=NULL; VVV>>SHGetSpecialFolderLocation(NULL , CSIDL_NETWORK, &pidl); VVV>>SHGetFileInfo(...,,, ...|SHGFI_PIDL);
IAL>кроме сетевого окружения нужно вытащить иконки типа "домен", "вся сеть" и др. IAL>сетевых ресурсов(набираются с пом. WNetEnumResource)
IAL>ладно, с чего все началось. IAL>нужно было написать свой класс(виндовского контрола соответствующего я не нашел) IAL>для отображения дерева каталогов IAL>виндовские стандартные аналоги — диалог выбора каталога(вызывается IAL>с пом. апишной функции) или в проводнике (может есть еще)
IAL>все иконки каталогов/файлов легко вытаскиваются с пом. SHGetFileInfo IAL>а вот иконки ентих самых сетевых ресурсов я не смог корректно вытащить
http://www.codeproject.com/shell/shellicon.asp
не используйте ф-ции shell, в частности ExtractAssociatedIcon() & SHGetFileInfo()
они создают копию system image list ( NT/2000/XP ), в результате ваше
приложение после вызова одной из них "потяжелеет" более чем на 1MB ...