使用 Windows 窗体应用程序时如何将鼠标光标更改为自定义光标?
Posted
技术标签:
【中文标题】使用 Windows 窗体应用程序时如何将鼠标光标更改为自定义光标?【英文标题】:How to change the mouse cursor into a custom one when working with Windows Forms applications? 【发布时间】:2011-10-08 06:56:32 【问题描述】:在UserControl
中,我想将鼠标光标从箭头更改为手形图标。
我目前做的是这样的:
this.Cursor = Cursors.Hand;
这很好,它给了我一个像这样的鼠标光标:
但是我的问题来了……这显示了一只手的手指。 我需要的是一只“抓”的手,更像是这个:
我该怎么做?,如何加载图标文件 (.ico)、光标文件 (.cur) 或图像文件 (.png),并将其用作鼠标光标?
【问题讨论】:
这是一个教程:switchonthecode.com/tutorials/… 基本上它使用 PInvoke 和 Windows API 来实现你想要的。 如果提供的文件没有颜色,则接受的答案有效。如果您有颜色 - 您需要使用我在下面的回答中描述的 Windows API。 @Derek W:我没有意识到这一点。我使用的游标确实不包含颜色信息。 【参考方案1】:如果你有游标文件:
Cursor myCursor = new Cursor("myCursor.cur");
myControl.Cursor = myCursor;
否则你必须创建一个:
更多关于custom cursors的信息
【讨论】:
完美运行!也感谢那个链接,我不知道那个网站。【参考方案2】:在 WinForms Cursor
类中使用自定义游标的一个注意事项是,当使用流、文件名和资源构造函数重载时,提供的 .cur
文件必须是黑白颜色的。
这意味着如果.cur
文件包含除黑色和白色之外的任何颜色,这将不起作用。
Cursor myCursor = new Cursor("myCursor.cur");
myControl.Cursor = myCursor;
有一种方法可以通过使用 Windows 句柄构造函数重载来解决此限制:
使用 Windows API 创建句柄:
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern IntPtr LoadCursorFromFile(string fileName);
然后将其传递给适当的Cursor
构造函数,如下所示:
IntPtr handle = LoadCursorFromFile("myCursor.cur");
Cursor myCursor = new Cursor(handle);
myControl.Cursor = myCursor;
我希望这可以防止其他人对ArgumentException
被抛出表示:Image format is not valid. The image file may be corrupted.
在使用其他Cursor
构造函数重载时使用包含颜色的.cur
文件。
【讨论】:
【参考方案3】:你试过System.Windows.Forms.Cursor curs = new System.Windows.Forms.Cursor(file_name);
吗?
【讨论】:
【参考方案4】:我测试了这个方法。没关系。这是我的申请:
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern IntPtr LoadCursorFromFile(string fileName);
Cursor myCursor;
private void tsbtn_ZoomIn_Click(object sender, EventArgs e)
IntPtr handle = LoadCursorFromFile("view_zoom_in.cur");
myCursor = new Cursor(handle);
zg1.Cursor = myCursor;
【讨论】:
以上是关于使用 Windows 窗体应用程序时如何将鼠标光标更改为自定义光标?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法使用python将Windows鼠标光标更改为自定义光标?