将鼠标指针替换为图像后,如何将图像居中置于鼠标指针位置而不是图像的左上角

本文关键字:图像 鼠标指针 位置 左上角 替换 | 更新日期: 2023-09-27 18:19:12

我有一个光标图像。cur,最大宽度和高度为250像素,我完全需要。

当按住鼠标右键时,我已经成功地将鼠标指针图像替换为此当前图像。

问题是,当我使用的时候,指针是与图像的左上角相关联的,所以当我超越例如画布的边界时,当前图像消失,我回到正常的指针图像。

我希望这个cur图像位于鼠标指针位置的中心,而不是它的左上角。我该怎么做呢?

private void canvas_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
    {
        Cursor cPro = new Cursor(@"C:'Users'Faris'Desktop'C# Testing Projects'cPro.cur");
        globalValues.cursorSave = canvas.Cursor;
        canvas.Cursor = cPro;
    }

private void canvas_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
    {
        canvas.Cursor = globalValues.cursorSave;
    }

将鼠标指针替换为图像后,如何将图像居中置于鼠标指针位置而不是图像的左上角

您有两个选择:

  1. 在Visual Studio中,在图像编辑器中打开光标文件或资源,从工具栏中选择热点工具。然后点击新热点并保存文件

  2. 实际使用位图创建光标,并自行指定热点

下面的代码来自这里:

namespace CursorTest
{
  public struct IconInfo
  {
    public bool fIcon;
    public int xHotspot;
    public int yHotspot;
    public IntPtr hbmMask;
    public IntPtr hbmColor;
  }
  public class CursorTest : Form
  {
    public CursorTest()
    {
      this.Text = "Cursor Test";
      Bitmap bitmap = new Bitmap(140, 25);
      Graphics g = Graphics.FromImage(bitmap);
      using (Font f = new Font(FontFamily.GenericSansSerif, 10))
        g.DrawString("{ } Switch On The Code", f, Brushes.Green, 0, 0);
      this.Cursor = CreateCursor(bitmap, 3, 3);
      bitmap.Dispose();
    }
    [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);
    public static Cursor CreateCursor(Bitmap bmp, int xHotSpot, int yHotSpot)
    {
      IconInfo tmp = new IconInfo();
      GetIconInfo(bmp.GetHicon(), ref tmp);
      tmp.xHotspot = xHotSpot;
      tmp.yHotspot = yHotSpot;
      tmp.fIcon = false;
      return new Cursor(CreateIconIndirect(ref tmp));
    }
  }
}