C# Winforms中的自定义光标

3
有人知道如何简单地使用自定义光标吗?我有一个 .cur 和 .png 格式的光标文件。我尝试将其作为资源添加到我的项目中,也尝试将其作为文件包含在项目中。理想情况下,我希望将其嵌入到项目中,但我只想让它工作起来。
当我使用 Cursor cur = new Cursor("mycursor.cur") 时,会出现“图像格式无效。图像文件可能已损坏”的错误提示。我尝试了这个链接http://mahesg.wordpress.com/2008/02/09/embedding-cursor/,但没有成功。使用 WinForm1.Properties.Resources.mycursor 返回一个 byte[] 数组,我不知道如何将其转换为 Cursor 类型。
4个回答

10

由于某些原因,光标类非常挑剔它将读取什么。您可以使用Windows API自己创建句柄,然后将其传递给光标类。

C#:

//(in a class)
public static Cursor ActuallyLoadCursor(String path) {
    return new Cursor(LoadCursorFromFile(path))
}
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern IntPtr LoadCursorFromFile(string fileName);

VB.Net:

'(in a class)'
Public Shared Function ActuallyLoadCursor(path As String) As Cursor
    Return New Cursor(LoadCursorFromFile(path))
End Function
<System.Runtime.InteropServices.DllImport("user32.dll")>
Private Shared Function LoadCursorFromFile(fileName As String) As IntPtr
End Function

非常感谢@Strilanc,这个问题困扰我已经很久了。现在我可以完成我的论文项目了!! :D - Ash
这在2022年运行得非常好。谢谢! - Victor Zakharov

5

使用new Cursor(new MemoryStream(Properties.Resources.mycursor))创建新的光标。


尝试过了,仍然没有改变任何东西。 - Jack
确保它实际上是一个 .cur 文件,这与任何其他图像格式都不同。 - SLaks
我认为 .cur 文件可能有问题。我在 Photoshop 中保存它时选择了 .cur 选项,因此我认为它是一个有效的 .cur 文件。但可能是一个过时的插件。光标使用 PNG 可以工作,但不使用 CUR。这会有影响吗? - Jack
这很令人惊讶。如果您在鼠标属性中选择它会发生什么? - SLaks
尽管光标图像已更改,但光标无法根据其大小进行单击。它的点击范围与以前相同。 - Gray Programmerz

4

在C#中为光标添加自定义图标:

将图标文件添加到项目资源中(如:Processing.ico)

并在图像的属性窗口中将“生成操作”切换为“嵌入式”

Cursor cur = new Cursor(Properties.Resources.**Imagename**.Handle);
this.Cursor = cur;

示例:

Cursor cur = new Cursor(Properties.Resources.Processing.Handle);
this.Cursor = cur;

将图标文件添加到项目资源中。这该怎么做?是将光标文件拖放到解决方案浏览器中项目的Resources.resx吗? - kdbanman
将图标文件添加到项目资源中。如何操作?是将光标文件拖放到解决方案资源管理器中的项目资源(Resources.resx)中吗?怎么做?请不要在回答中含糊或双关语。 - Hoven
“将图标文件添加到项目资源” 意味着打开项目属性 -> 资源 -> “添加资源” -> “添加现有文件”。 - oo_dev

0

目标:在示例WinForms UI中,当用户需要进行剪切操作时,将光标更改为自定义光标

按照以下步骤操作即可:

  1. 将图标文件(例如cut.ico)添加到项目中
  2. 现在将图标添加到项目资源中 要添加到资源,请右键单击项目->属性->资源,然后将ico文件从项目文件夹(在第1点中添加到项目文件夹中)拖放到资源上
  3. 使用以下代码即可实现
System.Windows.Forms.Cursor _customCutCursor = 
   new System.Windows.Forms.Cursor(Properties.Resources.cut.Handle);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接