DotNet 4.8.1 build of DotNetBar
This commit is contained in:
76
PROMS/DotNetBar Source Code/Controls/CursorHelper.cs
Normal file
76
PROMS/DotNetBar Source Code/Controls/CursorHelper.cs
Normal file
@@ -0,0 +1,76 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace DevComponents.DotNetBar.Controls
|
||||
{
|
||||
internal struct IconInfo
|
||||
{
|
||||
public bool fIcon;
|
||||
public int xHotspot;
|
||||
public int yHotspot;
|
||||
public IntPtr hbmMask;
|
||||
public IntPtr hbmColor;
|
||||
}
|
||||
internal class CursorHelper
|
||||
{
|
||||
[DllImport("user32.dll")]
|
||||
public static extern IntPtr CreateIconIndirect(ref IconInfo icon);
|
||||
[DllImport("user32.dll")]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
public static extern bool GetIconInfo(IntPtr hIcon, ref IconInfo pIconInfo);
|
||||
[DllImport("gdi32.dll")]
|
||||
public static extern bool DeleteObject(IntPtr handle);
|
||||
[DllImport("user32.dll", CharSet = CharSet.Auto)]
|
||||
extern static bool DestroyIcon(IntPtr handle);
|
||||
public static Cursor CreateCursor(Bitmap bm, int xHotspot, int yHotspot, bool resize = true)
|
||||
{
|
||||
IntPtr ptr = (resize) ? ((Bitmap)ResizeBitmap(bm, 32, 32)).GetHicon() : bm.GetHicon();
|
||||
IconInfo inf = new IconInfo();
|
||||
GetIconInfo(ptr, ref inf);
|
||||
inf.xHotspot = xHotspot;
|
||||
inf.yHotspot = yHotspot;
|
||||
inf.fIcon = false;
|
||||
IntPtr cursorPtr = CreateIconIndirect(ref inf);
|
||||
if (inf.hbmColor != IntPtr.Zero) { DeleteObject(inf.hbmColor); }
|
||||
if (inf.hbmMask != IntPtr.Zero) { DeleteObject(inf.hbmMask); }
|
||||
if (ptr != IntPtr.Zero) { DestroyIcon(ptr); }
|
||||
Cursor c = new Cursor(cursorPtr);
|
||||
c.Tag = (resize) ? new Size(32, 32) : bm.Size;
|
||||
return c;
|
||||
}
|
||||
public static Bitmap ResizeBitmap(Image image, int maxWidth, int maxHeight)
|
||||
{
|
||||
double ratio = System.Math.Min((double)maxHeight / image.Height, (double)maxWidth / image.Width);
|
||||
var propWidth = (int)(image.Width * ratio);
|
||||
var propHeight = (int)(image.Height * ratio);
|
||||
var newImage = new Bitmap(propWidth, propHeight);
|
||||
using (var g = Graphics.FromImage(newImage))
|
||||
{
|
||||
g.DrawImage(image, 0, 0, propWidth, propHeight);
|
||||
}
|
||||
return newImage;
|
||||
}
|
||||
public static Bitmap GetControlBitmap(Control c, Color transparent)
|
||||
{
|
||||
var bm = new Bitmap(c.Width, c.Height);
|
||||
c.DrawToBitmap(bm, new Rectangle(0, 0, c.Width, c.Height));
|
||||
if (!transparent.IsEmpty)
|
||||
{
|
||||
bm.MakeTransparent(transparent);
|
||||
}
|
||||
return bm;
|
||||
}
|
||||
public static Bitmap OverlayBitmap(Bitmap baseBitmap, Bitmap overlay, Point atPosition)
|
||||
{
|
||||
using (var g = Graphics.FromImage(baseBitmap))
|
||||
{
|
||||
g.DrawImage(overlay, new Rectangle(atPosition, overlay.Size));
|
||||
}
|
||||
return baseBitmap;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user