【问题标题】:Cursors.Hand does not display the Link Select cursorCursors.Hand 不显示链接选择光标
【发布时间】:2010-08-27 12:20:13
【问题描述】:

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

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 似乎与鼠标属性中的 Link Select 光标不对应。但我找不到更适合在Cursors 类中使用的东西。我做错了什么?

【问题讨论】:

    标签: .net cursor mouseover


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2012-12-29
      • 2023-04-11
      • 1970-01-01
      • 2017-12-30
      • 1970-01-01
      • 1970-01-01
      • 2022-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多