Dans une application .NET 1.0 C#, je souhaite afficher une liste de fichiers et de dossiers dans un contrôle listview. Je veux récupérer par programme à partir des fenêtres les icônes pour les fichiers ou les dossiers pour les afficher de manière appropriée dans la vue de la liste. Actuellement, j'utilise Windows API Shell32.dll, mais j'ai des problèmes avec le canal alpha dans les icônes (les arrière-plans des icônes apparaissent en noir, plutôt qu'en blanc/transparent). Ci-dessous deux extraits de code montrant l'API que j'essaie d'utiliser, et le code implémenté pour récupérer l'icône du système pour un dossier (le code du fichier est similaire).Récupération des icônes système dans les canaux C# 1.0 et Alpha
[DllImport("Shell32.dll")]
public static extern IntPtr SHGetFileInfo(
string pszPath,
uint dwFileAttributes,
ref SHFILEINFO psfi,
uint cbFileInfo,
uint uFlags
);
... (note: Shell32 est une classe wrapper pour l'API ci-dessus)
// 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();
Est-ce la bonne approche?
Existe-t-il un meilleur moyen d'y parvenir?
Ou, y a-t-il quelque chose que je dois faire pour définir correctement le canal alpha dans l'icône?
Merci! Cela m'a fait gagner beaucoup de temps. – Jayden