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