How to change the mouse cursor into a custom one when working with Windows Forms applications?

為{幸葍}努か 提交于 2019-11-29 00:22:25

问题


In a UserControl I want to change the mouse cursor from the arrow, to a hand icon.
What I currently do is this:

this.Cursor = Cursors.Hand;

This is very nice, it gives me a mouse cursor looking like this:

But here comes my problem... this shows a hand with a pointing finger.
What I need is a "grabbing" hand, more like this one:

How do I do this?, How can I load an icon file (.ico), a cursor file (.cur), or image file (.png), and use it as the mouse cursor?


回答1:


If you have a cursor file:

Cursor myCursor = new Cursor("myCursor.cur");
myControl.Cursor = myCursor;

otherwise you have to create one:

some more information about custom cursors




回答2:


Have you tried System.Windows.Forms.Cursor curs = new System.Windows.Forms.Cursor(file_name); ?




回答3:


A caveat to using custom cursors with the WinForms Cursor class is that when using the stream, filename, and resource constructor overloads the supplied .cur file must be black and white in color.

Meaning that this will not work if the .cur files contains any colors besides black and white.

Cursor myCursor = new Cursor("myCursor.cur");
myControl.Cursor = myCursor;

There is a way around this limitation by using the Windows handle constructor overload:

Create the handle by using the Windows API:

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

Then pass it to the appropriate Cursor constructor like this:

IntPtr handle = LoadCursorFromFile("myCursor.cur");
Cursor myCursor = new Cursor(handle);
myControl.Cursor = myCursor;

I hope this prevents others from scratching their heads to an ArgumentException being thrown stating: Image format is not valid. The image file may be corrupted. when using the other Cursor constructor overloads with a .cur file that contains color.




回答4:


I tested this method. It's OK. This is my apply:

    [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;
    }


来源:https://stackoverflow.com/questions/6743644/how-to-change-the-mouse-cursor-into-a-custom-one-when-working-with-windows-forms

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!