我的项目中有以下代码,当用户将鼠标悬停在自定义按钮上时更改鼠标光标:
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
课程中使用的内容。我做错了什么?
答案 0 :(得分:4)
.NET框架为Cursor.Hand
提供了自己的游标;它不会从操作系统加载用户选择的光标。
我只能想象这是因为运行.NET的Windows NT 4不提供“手”光标。它是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));
}
}