我正在使用以这种方式加载的自定义光标:
Bitmap bit = new Bitmap(path);
cur = new Cursor(bit.GetHicon());
Cursor.current = cur;
我的位图是 44x58 png,鼠标热点并不完全是我想要的位置。我寻找一个属性来更改鼠标热点,但我发现的唯一一个属性是只读的(
cur.Hotspot
)。我需要做什么来改变它的坐标?
谢谢
在 Visual Studio 中,在图像编辑器中打开光标文件或资源,然后从工具栏中选择热点工具。然后单击新热点并保存文件。 AFAIK 无法通过 .NET API 设置热点,但可以通过 WIN32 API 进行选项,如其他人评论中的链接所示。
超级老问题,但这是我如何更改光标的热点。输入文件按照要求是 png 文件而不是
*.cur
文件:
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr CreateIconIndirect([In] ref ICONINFO iconInfo);
[StructLayout(LayoutKind.Sequential)]
private struct ICONINFO
{
public bool fIcon;
public int xHotspot;
public int yHotspot;
public IntPtr hbmMask;
public IntPtr hbmColor;
}
public static Cursor CreateCursor(Bitmap bmp, int xHotSpot, int yHotSpot)
{
ICONINFO iconInfo = new ICONINFO();
iconInfo.fIcon = false;
iconInfo.xHotspot = xHotSpot;
iconInfo.yHotspot = yHotSpot;
iconInfo.hbmMask = bmp.GetHbitmap();
iconInfo.hbmColor = bmp.GetHbitmap();
IntPtr ptr = CreateIconIndirect(ref iconInfo);
return new Cursor(ptr);
}
using (Bitmap bmp = new Bitmap("*.png"))
{
Cursor customCursor = CreateCursor(bmp, 0, 0);
this.Cursor = customCursor;
}
也许有人还有需求;)
最后我只是决定隐藏鼠标光标并在热点坐标处绘制位图。建议的解决方案太复杂了。
cursor = new Bitmap(path);
在MouseMove事件中:
ex = e.X - offx //the x offset of the hotspot
ex = e.X - offy //the y offset of the hotspot
然后将 (ex,ey) 坐标处的位图绘制为最后一个绘图元素。