В приложении .NET 1.0 С# я хочу отобразить список файлов и папок в элементе управления списком. Я хочу программно извлекать из окон значки файлов или папок, чтобы отображать их соответствующим образом в представлении списка.
В настоящее время я использую Windows API Shell32.dll, но у меня проблемы с альфа-каналом в значках (фон значков отображается черным, а не белым/прозрачным).
Ниже приведены два фрагмента кода, демонстрирующие API, который я пытаюсь использовать, и реализованный код для получения системного значка для папки (код для файла аналогичен).
[DllImport("Shell32.dll")]
public static extern IntPtr SHGetFileInfo(
string pszPath,
uint dwFileAttributes,
ref SHFILEINFO psfi,
uint cbFileInfo,
uint uFlags
);
... (примечание: Shell32 — это класс-оболочка для вышеуказанного API)
// Get the folder icon
Shell32.SHFILEINFO shfi = new Shell32.SHFILEINFO();
Shell32.SHGetFileInfo( null,
Shell32.FILE_ATTRIBUTE_DIRECTORY,
ref shfi,
(uint) System.Runtime.InteropServices.Marshal.SizeOf(shfi),
flags );
System.Drawing.Icon.FromHandle(shfi.hIcon); // Load from the handle
// Get the icon for storage in an imagelist //
System.Drawing.Icon icon = (System.Drawing.Icon)System.Drawing.Icon.FromHandle(shfi.hIcon).Clone();
Это правильный подход?
Есть ли лучший способ сделать это?
Или мне нужно что-то сделать, чтобы правильно установить альфа-канал в значке?