В приложении .NET 1.0 C # я хочу отобразить список файлов и папок в элементе управления списком. Я хочу программно извлечь из окон значки для файлов или папок, чтобы отобразить их соответствующим образом в виде списка.
В настоящее время я использую 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();
Это правильный подход?
Есть ли лучший способ сделать это?
Или мне нужно что-то сделать, чтобы правильно установить альфа-канал на значке?