Ответ: Отобразить связанную с файлом или папкой иконку не сложно. (Пару раз плюнуть) Во первых получим дескриптор системного 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);