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