我從圖像資源在運行時創建的光標。新光標的HotSpot始終設置爲16x16(32x32圖像)。是否可以在運行時更改HotSpot,還是需要創建.cur文件?更改光標熱點中的WinForms/.NET
8
A
回答
22
你肯定能。這裏是我的實用功能,編輯您認爲合適的:)
public struct IconInfo
{
public bool fIcon;
public int xHotspot;
public int yHotspot;
public IntPtr hbmMask;
public IntPtr hbmColor;
}
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetIconInfo(IntPtr hIcon, ref IconInfo pIconInfo);
[DllImport("user32.dll")]
public static extern IntPtr CreateIconIndirect(ref IconInfo icon);
/// <summary>
/// Create a cursor from a bitmap without resizing and with the specified
/// hot spot
/// </summary>
public static Cursor CreateCursorNoResize(Bitmap bmp, int xHotSpot, int yHotSpot)
{
IntPtr ptr = bmp.GetHicon();
IconInfo tmp = new IconInfo();
GetIconInfo(ptr, ref tmp);
tmp.xHotspot = xHotSpot;
tmp.yHotspot = yHotSpot;
tmp.fIcon = false;
ptr = CreateIconIndirect(ref tmp);
return new Cursor(ptr);
}
/// <summary>
/// Create a 32x32 cursor from a bitmap, with the hot spot in the middle
/// </summary>
public static Cursor CreateCursor(Bitmap bmp)
{
int xHotSpot = 16;
int yHotSpot = 16;
IntPtr ptr = ((Bitmap)ResizeImage(bmp, 32, 32)).GetHicon();
IconInfo tmp = new IconInfo();
GetIconInfo(ptr, ref tmp);
tmp.xHotspot = xHotSpot;
tmp.yHotspot = yHotSpot;
tmp.fIcon = false;
ptr = CreateIconIndirect(ref tmp);
return new Cursor(ptr);
}
0
在this post on MSDN看看。似乎有一些可能的解決方案(使用P/Invoke),您應該可以複製粘貼和使用。
0
由於這是一個.NET的問題,而不是具體一個C#的問題,這裏是尼克的代碼部分VB.NET轉換(他人保存的麻煩)。
Module IconUtility
Structure IconInfo
Public fIcon As Boolean
Public xHotspot As Integer
Public yHotspot As Integer
Public hbmMask As IntPtr
Public hbmColor As IntPtr
End Structure
Private Declare Function GetIconInfo Lib "user32.dll" (hIcon As IntPtr, ByRef pIconInfo As IconInfo) As Boolean
Private Declare Function CreateIconIndirect Lib "user32.dll" (ByRef icon As IconInfo) As IntPtr
' Create a cursor from a bitmap without resizing and with the specified hot spot
Public Function CreateCursorNoResize(bmp As System.Drawing.Bitmap, xHotSpot As Integer, yHotSpot As Integer) As Cursor
Dim ptr As IntPtr = bmp.GetHicon
Dim tmp As IconInfo = New IconInfo()
GetIconInfo(ptr, tmp)
tmp.xHotspot = xHotSpot
tmp.yHotspot = yHotSpot
tmp.fIcon = False
ptr = CreateIconIndirect(tmp)
Return New Cursor(ptr)
End Function
End Module
相關問題
- 1. 更改網頁上鼠標光標的熱點
- 2. 停止在滾動熱點上更改光標
- 3. 在WPF中更改「插入點」光標
- 4. 光標在鼠標點擊更改
- 5. 在NSTextView中更改光標
- 6. 在asp.net中更改光標
- 7. 在QGraphicsView中更改光標
- 8. Java更改光標
- 9. 更改光標VB.NET
- 10. 在鼠標上更改HTML中的熱點顏色
- 11. 更改光標隱藏光標
- 12. JavaScript更改光標圖標
- 13. Google Chrome中的Google Maps API v3自定義光標的熱點
- 14. 是十字線中間的WPF十字光標的熱點嗎?
- 15. 更改按鈕的光標
- 16. 更改光標的外觀
- 17. 在窗口標題中更改光標
- 18. 在Silverlight中更改鼠標光標
- 19. 在處理中更改鼠標光標
- 20. 在Share Point中更改鼠標光標
- 21. 如何更改NetBeans中的光標(光標)閃爍率?
- 22. 更改移動熱點的配置
- 23. JavaScript光標更改(並再次更改)
- 24. 如何更改VIM中的光標鍵
- 25. 更改alertdialog中edittext的光標顏色
- 26. 更改MFC中按鈕的光標
- 27. 更改Excel 2013中光標的顏色
- 28. 更改燈箱中的光標
- 29. 如何更改光標中的排序
- 30. 更改ITextEditor中的光標類型
漂亮的工作。 – smack0007 2009-02-15 21:34:29