Winform應用程式如何使用自定義的滑鼠圖片
阿新 • • 發佈:2020-11-09
首先,建立圖片與滑鼠的對應關係。
class MouseStyle { [DllImport("user32.dll")] public static extern IntPtr SetCursor(IntPtr cursorHandle); static MouseStyle() { InitMouseStyle(); } private static void InitMouseStyle() { if (Hand == null) { Hand = SetCursor("Image//Hand.png"); } if (Arrow == null) { Arrow = SetCursor("Image//Arrow.png"); } } /// <summary> /// 滑鼠手型樣式 /// </summary> public static Cursor Hand = null; /// <summary> /// 滑鼠指標樣式 /// </summary> public static Cursor Arrow = null; /// <summary> /// 設定滑鼠樣式 /// </summary> /// <param name="fileName">自定義的滑鼠樣式檔案</param> /// <returns>滑鼠樣式</returns> private static Cursor SetCursor(string fileName) { //檔案的絕對路徑,在debug下 var path = System.IO.Path.GetFullPath(fileName) ; //畫圖 Bitmap bit = (Bitmap)Bitmap.FromFile(path,true); Bitmap myNewCursor = new Bitmap(bit.Width,bit.Height); Graphics g = Graphics.FromImage(myNewCursor); g.Clear(Color.FromArgb(0,0)); //箭頭和手型有點不一樣 if (System.IO.Path.GetFileName(fileName).Equals("Hand.png")) { g.DrawImage(bit,bit.Width / 2 - 15,bit.Height / 2,bit.Width / 2,bit.Height / 2); } else { g.DrawImage(bit,bit.Height / 2); } Cursor cursor; //獲取圖片的控制代碼 try { cursor = new Cursor(myNewCursor.GetHicon()); } catch { cursor = new Cursor(Icon.FromHandle(myNewCursor.GetHicon()).Handle); } //釋放資源 g.Dispose(); return cursor; } }
如果是滑鼠檔案.cur結尾,可以直接使用。
法1、在每一個窗體中單獨修改其中的滑鼠外觀,這樣滑鼠離開自己的程式後,也會恢復到系統預設的滑鼠樣式。
在上述類中,新增程式碼:
/// <summary> /// 設定滑鼠樣式 /// </summary> /// <param name="col">控制元件</param> public static void SetMouseStyle(Control col) { InitMouseStyle(); //設定窗體滑鼠為箭頭 if (col is Form) { ((Form)col).Cursor = Arrow; } //遍歷控制元件,如果控制元件是箭頭或預設,就改為自定義的箭頭 //如果是手型就改為自定義的手型 foreach (Control con in col.Controls) { if (con.Cursor == Cursors.Hand) { con.Cursor = Hand; } if (con.Cursor == Cursors.Arrow || con.Cursor == Cursors.Default) { con.Cursor = Arrow; } //遞迴遍歷 SetMouseStyle((Control)con); } }
然後在所有窗體中,均呼叫SetMouseStyle方法,傳入窗體自身
法2、修改系統滑鼠,待程式退出時,還原系統滑鼠。首先新增程式碼,呼叫window的API:
[DllImport("User32.DLL")] public static extern bool SetSystemCursor(IntPtr hcur,uint id); public const uint OCR_NORMAL = 32512; public const uint OCR_HAND = 32649; public const uint OCR_IBEAM = 32513; //速查 https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-setsystemcursor?redirectedfrom=MSDN //OCR_APPSTARTING:標準箭頭和小的沙漏;32650 //OCR_NORMAL:標準箭頭 32512 //OCR_CROSS:交叉十字線游標: 32515 //OCR_HAND:手的形狀(WindowsNT5.0和以後版本) 32649 //OCR_HELP:箭頭和向東標記; 32651 //OCR_IBEAM:I形樑; 32513 //OCR_NO:斜的圓 32648 //OCR_SIZEALL:四個方位的箭頭分別指向北、南、東、西 32646 //OCR_SIZENESEW:雙箭頭分別指向東北和西南; 32643 //OCR_SIZENS:雙箭頭,分別指向北和南 32645 //OCR_SIZENWSE:雙箭頭分別指向西北和東南; 32642 //OCR_SIZEWE:雙箭頭分別指向西和東 32644 //OCR_UP:垂直箭頭: 32516 //OCR_WAIT:32514 沙漏返回值:如果成功,返回非零值;如果失敗,返回值為零。 [DllImport("User32.DLL")] public static extern bool SystemParametersInfo(uint uiAction,uint uiParam,IntPtr pvParam,uint fWinIni); public const uint SPI_SETCURSORS = 87; public const uint SPIF_SENDWININICHANGE = 2;
程式啟動和退出時分別呼叫設定方法和恢復方法:
private void button1_Click(object sender,EventArgs e) { //設定 SetSystemCursor(Cursors.WaitCursor.CopyHandle(),OCR_NORMAL); SetSystemCursor(Cursors.WaitCursor.CopyHandle(),OCR_IBEAM); //..可以根據情況加 } private void button2_Click(object sender,EventArgs e) { //恢復 SystemParametersInfo(SPI_SETCURSORS,IntPtr.Zero,SPIF_SENDWININICHANGE); }
以上就是Winform應用程式如何使用自定義的滑鼠圖片的詳細內容,更多關於Winform 自定義滑鼠圖片的資料請關注我們其它相關文章!