Получение иконки файла или папки.


Ответ: Отобразить связанную с файлом или папкой иконку не сложно. (Пару раз плюнуть) Во первых получим дескриптор системного ImageList. Далее, укажем имя файла или папки в API-функции SHGetFileInfo и попросим ее вернуть индекс иконки из системного ImageList.

Шаг 1: Включите #include описание SHELLAPI.H

#include <win32\shellapi.h>

Шаг 2: Добавьте ImageList на главную форму программы. Не добавляйте никаких иконок в ImageList. Добавьте этот код в конструктор вашей формы, чтобы связать ImageList с системным ImageList. Для дополнительной информации см.предыдущую тему. .

SHFILEINFO info;
DWORD ImageHandle = SHGetFileInfo("",
0,
&info,
sizeof(info),
SHGFI_ICON |
SHGFI_SHELLICONSIZE |
SHGFI_SYSICONINDEX);
if (ImageHandle != 0)
{
ImageList1->Handle = ImageHandle;
ImageList1->ShareImages = true;
}

Step 3: Теперь добавим код, который возвратит индекс иконки файла, папки, диска,
который вы укажите. Здесь приведем 3 примера:

// этот код получит иконки для диска C:\
SHFILEINFO info;
DWORD result = SHGetFileInfo("C:\\",
0,
&info,
sizeof(info),
SHGFI_ICON |
SHGFI_SHELLICONSIZE |
SHGFI_SYSICONINDEX);
//  Проверим возвращенное значение.Если возвращаемое значение было OK,
// индекс значка возвращается в iIcon структуры SHFILEINFO if(result != 0) ImageList1->GetIcon(info.iIcon,Image1->Picture->Icon);
// Этот код покажет иконку папки C:\windows SHFILEINFO info; DWORD result = SHGetFileInfo("C:\\WINDOWS", 0, &info, sizeof(info), SHGFI_ICON | SHGFI_SHELLICONSIZE | SHGFI_SYSICONINDEX); if(result != 0) ImageList1->GetIcon(info.iIcon,Image1->Picture->Icon); // Этот код вернет иконку текстового файла DEPLOY.TXT SHFILEINFO info; DWORD result = SHGetFileInfo("C:\\CBUILDER\DEPLOY.TXT", 0, &info, sizeof(info), SHGFI_ICON | SHGFI_SHELLICONSIZE | SHGFI_SYSICONINDEX); if(result != 0) ImageList1->GetIcon(info.iIcon,Image1->Picture->Icon);

Copyright © 1997-2000 by Harold Howe. bcbdev.com
All rights reserved.
Переведено для сайта http://cbuilder.ru