Type a page name and press Enter. You'll jump to the page if it exists, or you can create it if it doesn't.
To create a page in a module other than user32, prefix the name with the module name and a period.
geticoninfo (user32)
.
C# Signature:
[StructLayout(LayoutKind.Sequential)]
struct ICONINFO
{
public bool fIcon; // Specifies whether this structure defines an icon or a cursor. A value of TRUE specifies
// an icon; FALSE specifies a cursor.
public Int32 xHotspot; // Specifies the x-coordinate of a cursor's hot spot. If this structure defines an icon, the hot
// spot is always in the center of the icon, and this member is ignored.
public Int32 yHotspot; // Specifies the y-coordinate of the cursor's hot spot. If this structure defines an icon, the hot
// spot is always in the center of the icon, and this member is ignored.
public IntPtr hbmMask; // (HBITMAP) Specifies the icon bitmask bitmap. If this structure defines a black and white icon,
// this bitmask is formatted so that the upper half is the icon AND bitmask and the lower half is
// the icon XOR bitmask. Under this condition, the height should be an even multiple of two. If
// this structure defines a color icon, this mask only defines the AND bitmask of the icon.
public IntPtr hbmColor; // (HBITMAP) Handle to the icon color bitmap. This member can be optional if this
// structure defines a black and white icon. The AND bitmask of hbmMask is applied with the SRCAND
// flag to the destination; subsequently, the color bitmap is applied (using XOR) to the
// destination by using the SRCINVERT flag.
}
[DllImport("user32.dll")]
static extern bool GetIconInfo(IntPtr hIcon, out ICONINFO piconinfo);
User-Defined Types:
None.
Notes:
None.
Tips & Tricks:
Please add some!
Sample Code:
The hbmColor and hbmMask are pointers to unmanaged data and must be deleted after use. The following code will grab the icon info for a cursor handle and dispose of the unmanaged resources, if needed:
public class IconInfo : IDisposable {
private ICONINFO ii;
public IconInfo(IntPtr hCursor) {
if (!GetIconInfo(hCursor, out ii)) {
throw new Exception("Bad hCursor");
}
}
public Bitmap ColorBitmap {
get {
if (ii.hbmColor == IntPtr.Zero) return null;
return Image.FromHbitmap(ii.hbmColor);
}
}
public Bitmap MaskBitmap {
get {
if (ii.hbmMask == IntPtr.Zero) return null;
return Image.FromHbitmap(ii.hbmMask);
}
}
public Point HotPoint {
get {
return new Point(ii.xHotspot, ii.yHotspot);
}
}
void IDisposable.Dispose() {
if (ii.hbmColor != IntPtr.Zero) DeleteObject(ii.hbmColor);
if (ii.hbmMask != IntPtr.Zero) DeleteObject(ii.hbmMask);
}
[DllImport("user32.dll")]
static extern bool GetIconInfo(IntPtr hIcon, out ICONINFO piconinfo);
[StructLayout(LayoutKind.Sequential)]
struct ICONINFO {
public bool fIcon;
public Int32 xHotspot;
public Int32 yHotspot;
public IntPtr hbmMask;
public IntPtr hbmColor;
}
}
Alternative Managed API:
Do you know one? Please contribute it!
The GetIconInfo API
12/29/2012 7:54:14 AM - Makarevich Ivan-93.125.39.169
Please edit this page!
Do you have...
helpful tips or sample code to share for using this API in managed code?
corrections to the existing content?
variations of the signature you want to share?
additional languages you want to include?
Select "Edit This Page" on the right hand toolbar and edit it! Or add new pages containing supporting types needed for this API (structures, delegates, and more).