C# 将光标指针替换为图像后,如何将图像居中放置在鼠标指针位置,而不是图像的左上角?

C# 将光标指针替换为图像后,如何将图像居中放置在鼠标指针位置,而不是图像的左上角?,c#,wpf,C#,Wpf,我有一个最大宽度和高度为250像素的光标图像.cur,这是我完全需要的 我已经设法将鼠标指针图像替换为这个cur图像,而不是按住鼠标右键单击 问题是,当使用I时,指针与图像的左上角相关联,因此当我超出画布的边界时,cur图像消失,我返回到正常的指针图像 我希望这个cur图像集中在鼠标指针的位置,而不是它的左上角。我该怎么做 private void canvas_MouseRightButtonDown(object sender, MouseButtonEventArgs e) {

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

我已经设法将鼠标指针图像替换为这个cur图像,而不是按住鼠标右键单击

问题是,当使用I时,指针与图像的左上角相关联,因此当我超出画布的边界时,cur图像消失,我返回到正常的指针图像

我希望这个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;
    }
您有两个选择:

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

  • 使用位图创建一个实用的光标,并自己指定热点

  • 以下代码来自:


    可能是Ok的复制品,我在创建cur的图像编辑器程序中完成了它,它工作了。热点是我不熟悉的关键词。谢谢汉斯和马汀。但是,下面的代码是针对WinForms而不是WPF的。同一个网站有另一个WPF,但只需在图像编辑器中修复它就容易多了。一个人能投评论票吗?我没有看到任何箭头。@这只是一个例子。我相信你能在WPF中处理它。我感谢你的帮助。为了完整性,如果有人在寻找,这里还有另一个链接。[链接]()。
    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));
        }
      }
    }