在 .NET 1.0 C# 应用程序中,我希望在列表视图控件中显示文件和文件夹列表。我想以编程方式从 Windows 检索文件或文件夹的图标,以便在列表视图中适当地显示它们。
目前,我使用的是 Windows API Shell32.dll,但图标中的 alpha 通道出现问题(图标的背景显示为黑色,而不是白色/透明)。
下面是两个代码摘录,显示了我正在尝试使用的 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();
这是正确的方法吗?
有没有更好的方法来实现这一点?
或者,我需要做些什么来正确设置图标中的 Alpha 通道吗?