2010-08-27 65 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)); 
    } 
}