2010-08-27 41 views
0

我已经在我的项目来改变鼠标光标下面的代码,当用户将鼠标悬停在自定义按钮:Cursors.Hand不显示链接选择光标

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课程中使用的任何东西。我究竟做错了什么?

回答

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