更改自定义光标的热点

问题描述 投票:0回答:3

我正在使用以这种方式加载的自定义光标:

Bitmap bit = new Bitmap(path);
cur = new Cursor(bit.GetHicon());
Cursor.current = cur;

我的位图是 44x58 png,鼠标热点并不完全是我想要的位置。我寻找一个属性来更改鼠标热点,但我发现的唯一一个属性是只读的(

cur.Hotspot
)。我需要做什么来改变它的坐标?

谢谢

c# winforms cursor
3个回答
1
投票

在 Visual Studio 中,在图像编辑器中打开光标文件或资源,然后从工具栏中选择热点工具。然后单击新热点并保存文件。 AFAIK 无法通过 .NET API 设置热点,但可以通过 WIN32 API 进行选项,如其他人评论中的链接所示。


0
投票

超级老问题,但这是我如何更改光标的热点。输入文件按照要求是 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;
}

也许有人还有需求;)


-2
投票

最后我只是决定隐藏鼠标光标并在热点坐标处绘制位图。建议的解决方案太复杂了。

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) 坐标处的位图绘制为最后一个绘图元素。

© www.soinside.com 2019 - 2024. All rights reserved.