使用Windows窗体应用程序时如何将鼠标光标更改为自定义光标?

Bar*_*ens 38 c# mouse cursor .net-2.0 winforms

UserControl我想要将鼠标光标从箭头更改为手形图标.
我目前做的是这样的:

this.Cursor = Cursors.Hand;
Run Code Online (Sandbox Code Playgroud)

这非常好,它给我一个鼠标光标看起来像这样:

在此输入图像描述

但是这里出现了我的问题......这显示了一只手指指针.
我需要的是一个"抓住"的手,更像是这个:

在此输入图像描述

我该怎么做?,如何加载图标文件(.ico),光标文件(.cur)或图像文件(.png),并将其用作鼠标光标?

fix*_*gon 19

如果你有一个光标文件:

Cursor myCursor = new Cursor("myCursor.cur");
myControl.Cursor = myCursor;
Run Code Online (Sandbox Code Playgroud)

否则你必须创建一个:

有关自定义游标的更多信息


Der*_*k W 5

在 WinFormsCursor类中使用自定义游标的一个警告是,当使用流、文件名和资源构造函数重载时,提供的.cur文件必须是黑白颜色的。

.cur这意味着如果文件包含除黑白之外的任何颜色,则此方法将不起作用。

Cursor myCursor = new Cursor("myCursor.cur");
myControl.Cursor = myCursor;
Run Code Online (Sandbox Code Playgroud)

有一种方法可以通过使用 Windows 句柄构造函数重载来解决此限制:

使用 Windows API 创建句柄:

[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern IntPtr LoadCursorFromFile(string fileName);
Run Code Online (Sandbox Code Playgroud)

然后将其传递给适当的Cursor构造函数,如下所示:

IntPtr handle = LoadCursorFromFile("myCursor.cur");
Cursor myCursor = new Cursor(handle);
myControl.Cursor = myCursor;
Run Code Online (Sandbox Code Playgroud)

我希望这可以防止其他人摸不着头脑,被ArgumentException抛出这样的错误:Image format is not valid. The image file may be corrupted.当使用其他Cursor构造函数重载包含.cur颜色的文件时。