将鼠标指针替换为图像后,如何将图像居中置于鼠标指针位置而不是图像的左上角
本文关键字:图像 鼠标指针 位置 左上角 替换 | 更新日期: 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;
}
您有两个选择:
-
在Visual Studio中,在图像编辑器中打开光标文件或资源,从工具栏中选择热点工具。然后点击新热点并保存文件
-
实际使用位图创建光标,并自行指定热点
下面的代码来自这里:
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));
}
}
}