protected override Bitmap KeyToBitmap(string key, IconSize size) { bool isDiskFolder = key.EndsWith(":\\"); string ext = PathEx.GetExtension(key); if ((ext != "" && ext != key && imageFilter.IndexOf(ext) != -1)) { return(GetFileIcon(FileSystemInfoEx.FromString(key).PIDL.Ptr, size)); } else if (key == "" || key.StartsWith(".")) //Extension { return(GetFileIcon(key, size)); } else { switch (size) { case IconSize.thumbnail: case IconSize.jumbo: return(loadJumbo(key, isDiskFolder)); case IconSize.extraLarge: _imgList.ImageListSize = SysImageListSize.extraLargeIcons; return(_imgList.Icon(_imgList.IconIndex(key, isDiskFolder)).ToBitmap()); //case IconSize.large : // _imgList.ImageListSize = SysImageListSize.largeIcons; // return _imgList.Icon(_imgList.IconIndex(key, isDiskFolder)).ToBitmap(); //case IconSize.small : // _imgList.ImageListSize = SysImageListSize.smallIcons; // return _imgList.Icon(_imgList.IconIndex(key, isDiskFolder)).ToBitmap(); default: try { return(GetFileIcon(key, size)); } catch { return(KeyToBitmap(UCUtils.GetProgramPath(), size)); } } } }
//private static Bitmap loadJumbo(string lookup, bool forceLoadFromDisk, IconSize size) //{ // SysImageList _imgList = isVistaUp() && ((size == IconSize.thumbnail) || (size == IconSize.jumbo)) ? _imgListJumbo : _imgListXL; // try // { // Icon icon = _imgList.Icon(_imgList.IconIndex(lookup, forceLoadFromDisk)); // Bitmap bitmap = icon.ToBitmap(); // icon.Dispose(); // System.Drawing.Color empty = System.Drawing.Color.FromArgb(0, 0, 0, 0); // if (bitmap.Width < 256) // bitmap = resizeImage(bitmap, new System.Drawing.Size(256, 256), 0); // else if (bitmap.GetPixel(100, 100) == empty && bitmap.GetPixel(200, 200) == empty && bitmap.GetPixel(200, 200) == empty) // { // _imgList.ImageListSize = SysImageListSize.largeIcons; // bitmap = resizeJumbo(_imgList.Icon(_imgList.IconIndex(lookup)).ToBitmap(), new System.Drawing.Size(200, 200), 5); // } // return bitmap; // } // catch // { // return GetFileIcon(lookup, IconSize.large); // } //} protected override Bitmap KeyToBitmap(string key, IconSize size) { try { bool isDiskFolder = key.EndsWith(":\\"); bool isTemp = key.Equals(tempPath); string ext = PathEx.GetExtension(key).ToLower(); if (!ext.StartsWith(".")) { if (specialExtFilter.Split(',').Contains(key)) { switch (ext) { case ".exe": ShellDll.PIDL pidlLookup = FileSystemInfoEx.FromString(key).PIDL; try { return(GetFileIcon(pidlLookup.Ptr, size)); } finally { if (pidlLookup != null) { pidlLookup.Free(); } } case ".lnk": using (ShellLink sl = new ShellLink(key)) switch (size) { case IconSize.small: return(sl.SmallIcon.ToBitmap()); default: return(sl.LargeIcon.ToBitmap()); } } } } if (fileBasedFSFilter.Split(',').Contains(key)) { return(GetFileBasedFSBitmap(key, size)); } else if (key == "" || key.StartsWith(".")) //Extension { return(GetFileIcon(key, size)); } else if (IsSpecialFolder(key)) { ShellDll.PIDL pidlLookup = FileSystemInfoEx.FromString(key).PIDL; try { return(GetFileIcon(pidlLookup.Ptr, size)); } finally { if (pidlLookup != null) { pidlLookup.Free(); } } } else { switch (size) { case IconSize.thumbnail: return(loadThumbnail(key, isDiskFolder || isTemp)); //case IconSize.jumbo: //case IconSize.extraLarge: // return loadJumbo(key, isDiskFolder || isTemp, size); //case IconSize.large : // _imgList.ImageListSize = SysImageListSize.largeIcons; // return _imgList.Icon(_imgList.IconIndex(key, isDiskFolder)).ToBitmap(); //case IconSize.small : // _imgList.ImageListSize = SysImageListSize.smallIcons; // return _imgList.Icon(_imgList.IconIndex(key, isDiskFolder)).ToBitmap(); default: try { return(GetFileIcon(key, size)); } catch { return(KeyToBitmap(UCUtils.GetProgramPath(), size)); } } } } catch { return(new Bitmap(1, 1)); } }