我們的軟件中需要很多自定義的光標,以便在用戶交互過程中進行必要的提示。我們開始的做法是將光標放到資源文件中,然後用類似下面的代碼加載:
var cursor = new Cursor(new MemoryStream(Resource.OpenHandIcon)); ... ... if (useDefaultCursor) { control.Cursor = Cursors.Default; } else { control.Cursor = cursor; }
但在測試過程中應該顯示自定義光標時,總是時而替換成功,時而替換不成功。
原來是.NET中提供的Cursor類的問題,Cursor的構造函數不能加載黑白顏色之外的光標!但可以通過下面的代碼繞開這一限制:
public static Cursor LoadResourceCursor(byte[] data) { var path = Path.GetTempFileName(); File.WriteAllBytes(path, data); return new Cursor(LoadCursorFromFile(path)); } [System.Runtime.InteropServices.DllImport("user32.dll")] private static extern IntPtr LoadCursorFromFile(string fileName);
這樣處理後所有光標就都能正常使用了。
出處:http://www.cnblogs.com/brucebi/archive/2013/04/02/2995888.html