Как изменить курсор мыши на пользовательский при работе с приложениями Windows Forms? - PullRequest
37 голосов
/ 19 июля 2011

В UserControl я хочу изменить курсор мыши от стрелки на значок руки.
В настоящее время я делаю следующее:

this.Cursor = Cursors.Hand;

Это очень хорошо, это даетмне курсор мыши, похожий на это:

enter image description here

Но тут возникает моя проблема ... это показывает руку с указательным пальцем.
Что мне нужно, это "захват""hand, больше похоже на это:

enter image description here

Как мне это сделать ?, Как я могу загрузить файл значков (.ico), файл курсора (.cur),или файл изображения (.png) и использовать его как курсор мыши?

Ответы [ 4 ]

19 голосов
/ 19 июля 2011

Если у вас есть файл курсора:

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

в противном случае вы должны создать его:

дополнительная информация о пользовательских курсорах

2 голосов
/ 19 июля 2011

Вы пробовали System.Windows.Forms.Cursor curs = new System.Windows.Forms.Cursor(file_name);?

1 голос
/ 15 марта 2014

Подсказка к использованию пользовательских курсоров с классом 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, который содержит цвет.

0 голосов
/ 25 апреля 2014

Я проверил этот метод. Все нормально. Это мое заявление:

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