Cursors.Hand不显示链接选择光标

时间:2010-08-27 12:20:13

标签: .net cursor mouseover

我的项目中有以下代码,当用户将鼠标悬停在自定义按钮上时更改鼠标光标:

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的鼠标属性中,我已将链接选择光标设置为动画彩色箭头。

要调查此问题,我将动画箭头设置为鼠标属性中的忙碌光标,并将OnMouseEnter中的代码更改为:

this.Cursor = Cursors.WaitCursor;

这符合我的预期,并显示了箭头。

似乎Cursors.Hand与鼠标属性中的链接选择光标不对应。但我找不到更适合在Cursors课程中使用的内容。我做错了什么?

1 个答案:

答案 0 :(得分:4)

.NET框架为Cursor.Hand提供了自己的游标;它不会从操作系统加载用户选择的光标。

我只能想象这是因为运行.NET的Windows NT 4不提供“手”光标。它是Windows 98和2000中添加的一项功能。目标Windows 95或NT 4的应用程序在需要时提供自己的手形光标。

好消息是解决方法相对简单。这是一个相当少量的互操作。您只需要将LoadCursorIDC_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));
    }
}