стандартные иконки
От: Igrushkin Alexandr Leonidovitch  
Дата: 27.08.02 09:52
Оценка:
Ситуация такая: в программе нужно использовать стандартные иконки файлов и т.д. (все, что встречаются, например, в списке каталогов проводника). Как это программно сделать?
Вариант "вырезать и вставаить себе" не подходит.
Re: стандартные иконки
От: VVV Россия  
Дата: 27.08.02 10:26
Оценка:
Здравствуйте Igrushkin Alexandr Leonidovitch, Вы писали:

IAL>Ситуация такая: в программе нужно использовать стандартные иконки файлов и т.д. (все, что встречаются, например, в списке каталогов проводника). Как это программно сделать?

IAL>Вариант "вырезать и вставаить себе" не подходит.

Посмотри здесь:
http://msdn.microsoft.com/code/default.asp?url=/msdn-files/026/001/876/FileType/Source%20Files/FileIcon_cpp.asp
Re[2]: стандартные иконки
От: sasha Грузия  
Дата: 27.08.02 10:38
Оценка:
Здравствуйте 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

Можно сделать намного проще:

SHFILEINFO shfi;
memset(&shfi,0,sizeof(shfi));
SHGetFileInfo("C:\\", 
    FILE_ATTRIBUTE_NORMAL,
    &shfi, sizeof(shfi),
    SHGFI_ICON | SHGFI_USEFILEATTRIBUTES);
HICON hIcon = shfi.hIcon; // нужная иконка
Re[3]: стандартные иконки
От: Igrushkin Alexandr Leonidovitch  
Дата: 27.08.02 10:54
Оценка:
Предложенные варианты годятся для извлечения иконок файлов, а, например, иконку "Сетевое окружение" как извлечь?
Re[4]: стандартные иконки
От: VVV Россия  
Дата: 27.08.02 11:48
Оценка:
Здравствуйте Igrushkin Alexandr Leonidovitch, Вы писали:

IAL>Предложенные варианты годятся для извлечения иконок файлов, а, например, иконку "Сетевое окружение" как извлечь?


Попробуй так:
LPITEMIDLIST pidl=NULL;
SHGetSpecialFolderLocation(NULL , CSIDL_NETWORK, &pidl);
SHGetFileInfo(...,,, ...|SHGFI_PIDL);
Re: стандартные иконки
От: bog  
Дата: 27.08.02 11:56
Оценка:
Здравствуйте Igrushkin Alexandr Leonidovitch, Вы писали:

IAL>Ситуация такая: в программе нужно использовать стандартные иконки файлов и т.д. (все, что встречаются, например, в списке каталогов проводника). Как это программно сделать?

IAL>Вариант "вырезать и вставаить себе" не подходит.

Виндовоз подбирает иконку, насколько я понял, из следующих соображений:
если
— это двоичный файл, то он
1) просматривает его ресурсы — берёт иконку с минимальным идентификатором(проверено);
2) если иконок нету то выбирает иконку в соответствии с расширением файла из своей регистрационной базе;

— иначе смотри пункт 2).

База соответствий (иконки к типу файла) лежит бысрее всего в реестре.

Системные иконки лежат в shell32.dll, их вытянуть легко

HINSTANCE hLib;
HICON hic;
hLib = LoadLibrary("shell32.dll");
icon = LoadIcon(hLib, MAKEINTRESOURCE(32));


Получиш иконку корзины.
По идее коды иконок должны совпадать для разных Виндов. Если нет то за нет мелкософту СПАСИБО.
Re[5]: стандартные иконки
От: Igrushkin Alexandr Leonidovitch  
Дата: 27.08.02 13:54
Оценка:
Здравствуйте VVV, Вы писали:

VVV>Попробуй так:

VVV>LPITEMIDLIST pidl=NULL;
VVV>SHGetSpecialFolderLocation(NULL , CSIDL_NETWORK, &pidl);
VVV>SHGetFileInfo(...,,, ...|SHGFI_PIDL);

кроме сетевого окружения нужно вытащить иконки типа "домен", "вся сеть" и др.
сетевых ресурсов(набираются с пом. WNetEnumResource)

ладно, с чего все началось.
нужно было написать свой класс(виндовского контрола соответствующего я не нашел)
для отображения дерева каталогов
виндовские стандартные аналоги — диалог выбора каталога(вызывается
с пом. апишной функции) или в проводнике (может есть еще)

все иконки каталогов/файлов легко вытаскиваются с пом. SHGetFileInfo
а вот иконки ентих самых сетевых ресурсов я не смог корректно вытащить
Re[6]: стандартные иконки
От: ~Yuriy~ www.inspira.by.ru
Дата: 27.08.02 15:03
Оценка: 6 (1)
Здравствуйте 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 ...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.