StockIcons for Windows Forms?
This is what I had written to better understand the API, in C++/CLI and for Windows Forms. One could use it like this:
System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
Drawing::Icon ^ ic = StockIcons::GetIcon(StockIconIdentifier::Shield, StockIconFlag::ShellSize);
button->ImageList = gcnew ImageList();
button->ImageList->Images->Add(ic);
button->ImageIndex = 0;
}
If you would rather have this in C#, translating it should not be that hard. (Hint: have a look at StockIcons for Windows Presentation Framework?)
#pragma once
using namespace System;
using namespace Drawing;
namespace VistaBridge { namespace UI {
public enum class StockIconFlag {
Handle = SHGSI_ICON,
SystemIndex = SHGSI_SYSICONINDEX,
LinkOverlay = SHGSI_LINKOVERLAY,
Selected = SHGSI_SELECTED,
Large = SHGSI_LARGEICON,
ShellSize = SHGSI_SHELLICONSIZE
};
// Once the final Windows SDK is released, delete this type:
typedef enum {
SIID_DOCNOASSOC = 0, // document (blank page), no associated program
SIID_DOCASSOC = 1, // document with an associated program
SIID_APPLICATION = 2, // generic application with no custom icon
SIID_FOLDER = 3, // folder (closed)
SIID_FOLDEROPEN = 4, // folder (open)
SIID_DRIVE525 = 5, // 5.25" floppy disk drive
SIID_DRIVE35 = 6, // 3.5" floppy disk drive
SIID_DRIVEREMOVE = 7, // removable drive
SIID_DRIVEFIXED = 8, // fixed (hard disk) drive
SIID_DRIVENET = 9, // network drive
SIID_DRIVENETDISABLED = 10, // disconnected network drive
SIID_DRIVECD = 11, // CD drive
SIID_DRIVERAM = 12, // RAM disk drive
SIID_WORLD = 13, // entire network
SIID_SERVER = 15, // a computer on the network
SIID_PRINTER = 16, // printer
SIID_MYNETWORK = 17, // My network places
SIID_FIND = 22, // Find
SIID_HELP = 23, // Help
SIID_SHARE = 28, // overlay for shared items
SIID_LINK = 29, // overlay for shortcuts to items
SIID_SLOWFILE = 30, // overlay for slow items
SIID_RECYCLER = 31, // empty recycle bin
SIID_RECYCLERFULL = 32, // full recycle bin
SIID_MEDIACDAUDIO = 40, // Audio CD Media
SIID_LOCK = 47, // Security lock
SIID_AUTOLIST = 49, // AutoList
SIID_PRINTERNET = 50, // Network printer
SIID_SERVERSHARE = 51, // Server share
SIID_PRINTERFAX = 52, // Fax printer
SIID_PRINTERFAXNET = 53, // Networked Fax Printer
SIID_PRINTERFILE = 54, // Print to File
SIID_STACK = 55, // Stack
SIID_MEDIASVCD = 56, // SVCD Media
SIID_STUFFEDFOLDER = 57, // Folder containing other items
SIID_DRIVEUNKNOWN = 58, // Unknown drive
SIID_DRIVEDVD = 59, // DVD Drive
SIID_MEDIADVD = 60, // DVD Media
SIID_MEDIADVDRAM = 61, // DVD-RAM Media
SIID_MEDIADVDRW = 62, // DVD-RW Media
SIID_MEDIADVDR = 63, // DVD-R Media
SIID_MEDIADVDROM = 64, // DVD-ROM Media
SIID_MEDIACDAUDIOPLUS = 65, // CD+ (Enhanced CD) Media
SIID_MEDIACDRW = 66, // CD-RW Media
SIID_MEDIACDR = 67, // CD-R Media
SIID_MEDIACDBURN = 68, // Burning CD
SIID_MEDIABLANKCD = 69, // Blank CD Media
SIID_MEDIACDROM = 70, // CD-ROM Media
SIID_AUDIOFILES = 71, // Audio files
SIID_IMAGEFILES = 72, // Image files
SIID_VIDEOFILES = 73, // Video files
SIID_MIXEDFILES = 74, // Mixed files
SIID_FOLDERBACK = 75, // Folder back
SIID_FOLDERFRONT = 76, // Folder front
SIID_SHIELD = 77, // Security shield. Use for UAC prompts only.
SIID_WARNING = 78, // Warning
SIID_INFO = 79, // Informational
SIID_ERROR = 80, // Error
SIID_KEY = 81, // Key / Secure
SIID_SOFTWARE = 82, // Software
SIID_RENAME = 83, // Rename
SIID_DELETE = 84, // Delete
SIID_MEDIAAUDIODVD = 85, // Audio DVD Media
SIID_MEDIAMOVIEDVD = 86, // Movie DVD Media
SIID_MEDIAENHANCEDCD = 87, // Enhanced CD Media
SIID_MEDIAENHANCEDDVD = 88, // Enhanced DVD Media
SIID_MEDIAHDDVD = 89, // HD-DVD Media
SIID_MEDIABLURAY = 90, // BluRay Media
SIID_MEDIAVCD = 91, // VCD Media
SIID_MEDIADVDPLUSR = 92, // DVD+R Media
SIID_MEDIADVDPLUSRW = 93, // DVD+RW Media
SIID_DESKTOPPC = 94, // desktop computer
SIID_MOBILEPC = 95, // mobile computer (laptop/notebook)
SIID_USERS = 96, // users
SIID_MEDIASMARTMEDIA = 97, // Smart Media
SIID_MEDIACOMPACTFLASH = 98, // Compact Flash
SIID_DEVICECELLPHONE = 99, // Cell phone
SIID_DEVICECAMERA = 100, // Camera
SIID_DEVICEVIDEOCAMERA = 101, // Video camera
SIID_DEVICEAUDIOPLAYER = 102, // Audio player
SIID_NETWORKCONNECT = 103, // Connect to network
SIID_INTERNET = 104, // Internet
SIID_ZIPFILE = 105, // ZIP file
SIID_SETTINGS = 106, // Settings
SIID_MAX_ICONS = 107,
} FINAL_SHSTOCKICONID;
public enum class StockIconIdentifier {
DocumentNotAssociated = SIID_DOCNOASSOC,
DocumentAssociated = SIID_DOCASSOC,
Application = SIID_APPLICATION,
Folder = SIID_FOLDER,
FolderOpen = SIID_FOLDEROPEN,
Drive525 = SIID_DRIVE525,
Drive35 = SIID_DRIVE35,
DriveRemove = SIID_DRIVEREMOVE,
DriveFixed = SIID_DRIVEFIXED,
DriveNet = SIID_DRIVENET,
DriveNetDisabled = SIID_DRIVENETDISABLED,
DriveCD = SIID_DRIVECD,
DriveRAM = SIID_DRIVERAM,
World = SIID_WORLD,
Server = SIID_SERVER,
Printer = SIID_PRINTER,
MyNetwork = SIID_MYNETWORK,
Find = SIID_FIND,
Help = SIID_HELP,
Share = SIID_SHARE,
Link = SIID_LINK,
SlowFile = SIID_SLOWFILE,
Recycler = SIID_RECYCLER,
RecyclerFull = SIID_RECYCLERFULL,
MediaCDAudio = SIID_MEDIACDAUDIO,
Lock = SIID_LOCK,
AutoList = SIID_AUTOLIST,
PrinterNet = SIID_PRINTERNET,
ServerShare = SIID_SERVERSHARE,
PrinterFax = SIID_PRINTERFAX,
PrinterFaxNet = SIID_PRINTERFAXNET,
PrinterFile = SIID_PRINTERFILE,
Stack = SIID_STACK,
MediaSvcd = SIID_MEDIASVCD,
StuffedFolder = SIID_STUFFEDFOLDER,
DriveUnknown = SIID_DRIVEUNKNOWN,
DriveDvd = SIID_DRIVEDVD,
MediaDvd = SIID_MEDIADVD,
MediaDvdRam = SIID_MEDIADVDRAM,
MediaDvdRW = SIID_MEDIADVDRW,
MediaDvdR = SIID_MEDIADVDR,
MediaDvdRom = SIID_MEDIADVDROM,
MediaCDAudioPlus = SIID_MEDIACDAUDIOPLUS,
MediaCDRW = SIID_MEDIACDRW,
MediaCDR = SIID_MEDIACDR,
MediaCDBurn = SIID_MEDIACDBURN,
MediaBlankCD = SIID_MEDIABLANKCD,
MediaCDRom = SIID_MEDIACDROM,
AudioFiles = SIID_AUDIOFILES,
ImageFiles = SIID_IMAGEFILES,
VideoFiles = SIID_VIDEOFILES,
MixedFiles = SIID_MIXEDFILES,
FolderBack = SIID_FOLDERBACK,
FolderFront = SIID_FOLDERFRONT,
Shield = SIID_SHIELD,
Warning = SIID_WARNING,
Info = SIID_INFO,
Error = SIID_ERROR,
Key = SIID_KEY,
Software = SIID_SOFTWARE,
Rename = SIID_RENAME,
Delete = SIID_DELETE,
MediaAudioDvd= SIID_MEDIAAUDIODVD,
MediaMovieDvd = SIID_MEDIAMOVIEDVD,
MediaEnhancedCD = SIID_MEDIAENHANCEDCD,
MediaEnhancedDvd = SIID_MEDIAENHANCEDDVD,
MediaHDDvd = SIID_MEDIAHDDVD,
MediaBluRay = SIID_MEDIABLURAY,
MediaVcd = SIID_MEDIAVCD,
MediaDvdPlusR = SIID_MEDIADVDPLUSR,
MediaDvdPlusRW = SIID_MEDIADVDPLUSRW,
DesktopPC = SIID_DESKTOPPC,
MobilePC = SIID_MOBILEPC,
USERS = SIID_USERS,
MediaSmartMedia = SIID_MEDIASMARTMEDIA,
MediaCompactFlash = SIID_MEDIACOMPACTFLASH,
DeviceCellPhone = SIID_DEVICECELLPHONE,
DeviceCamera = SIID_DEVICECAMERA,
DeviceVideoCamera = SIID_DEVICEVIDEOCAMERA,
DeviceAudioPlayer = SIID_DEVICEAUDIOPLAYER,
NetworkConnect = SIID_NETWORKCONNECT,
Internet = SIID_INTERNET,
ZipFile = SIID_ZIPFILE,
Settings = SIID_SETTINGS,
};
public ref class StockIcons {
public:
static Icon ^ GetIcon(StockIconIdentifier identifier) { return GetIcon(identifier, static_cast<StockIconFlag>(0)); }
static Icon ^ GetIcon(StockIconIdentifier identifier, StockIconFlag flags) {
flags = flags | StockIconFlag::Handle;
SHSTOCKICONINFO stockIconInfo = {0};
stockIconInfo.cbSize = sizeof(stockIconInfo);
HRESULT hResult = SHGetStockIconInfo(static_cast<SHSTOCKICONID>(identifier), static_cast<UINT>(flags), & stockIconInfo);
if FAILED(hResult)
throw gcnew Runtime::InteropServices::COMException("SHGetStockIconInfo execution failure", hResult);
return Icon::FromHandle(static_cast<IntPtr>(stockIconInfo.hIcon));
}
};
} }