Cursors.Hand не отображает курсор выбора ссылки - PullRequest
0 голосов
/ 27 августа 2010

У меня есть следующий код в моем проекте для изменения курсора мыши, когда пользователь наводит курсор на пользовательскую кнопку:

protected override void OnMouseEnter(EventArgs e)
{
    this.Cursor = Cursors.Hand;
    base.OnMouseEnter(e);
}

protected override void OnMouseLeave(EventArgs e)
{
    this.Cursor = Cursors.Default;
    base.OnMouseLeave(e);
}

Это прекрасно работает, за исключением того, что отображаемый курсор является стандартной белой стрелкойкурсор.Но в свойствах мыши в Windows XP я установил курсор Link Select как анимированную красочную стрелку.

Чтобы исследовать проблему, я установил анимированную стрелку как Занято курсор в свойствах мыши и изменил код в OnMouseEnter на:

this.Cursor = Cursors.WaitCursor;

Это работает, как я ожидал, и стрелка была показана.

Кажется, что Cursors.Hand не соответствуетна Ссылка Выберите курсор в Свойствах мыши.Но я не могу найти ничего более подходящего для использования в классе Cursors.Что я делаю не так?

1 Ответ

4 голосов
/ 27 августа 2010

.NET Framework предоставляет собственный курсор для Cursor.Hand; он не загружает выбранный пользователем курсор из операционной системы.

Я могу только представить, что это связано с тем, что Windows NT 4, на которой будет работать .NET, не предоставляет «ручной» курсор. Эта функция была добавлена ​​в Windows 98 и 2000. Приложения, предназначенные для Windows 95 или NT 4, предоставляют собственный курсор в виде руки, если он им нужен.

Хорошая новость заключается в том, что обходной путь относительно прост. Это довольно небольшое количество взаимодействия. Вам просто нужно использовать LoadCursor с IDC_HAND, а затем передать возвращенный дескриптор в конструктор для Cursor класса.

using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;

class Form1 : Form{
    enum IDC{
        HAND = 32649,
        // other values omitted
    }

    [DllImport("user32.dll", CharSet=CharSet.Auto)]
    static extern IntPtr LoadCursor(IntPtr hInstance, IDC cursor);

    public Form1(){
        Cursor = new Cursor(LoadCursor(IntPtr.Zero, IDC.HAND));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...