C# winForm自定義鼠標樣式的兩種方法
作者:gissky_horse
鼠標樣式需要通過API來自定義。本文介紹了C#自定義鼠標樣式的兩種方法,可以避免自定義鼠標變成單色。
以前試過在C# WinForm中自定義鼠標樣式,結果顯示出來的鼠標變成單色。
后來百度了下,原來要用API來做。
首先引入兩個命名空間
- using System.Runtime.InteropServices;
- using System.Reflection;
C# winForm自定義鼠標樣式方法一
導入API
- [DllImport("user32.dll")]
- ublic static extern IntPtr LoadCursorFromFile(string fileName);
- [DllImport("user32.dll")]
- ublic static extern IntPtr SetCursor(IntPtr cursorHandle);
- [DllImport("user32.dll")]
- ublic static extern uint DestroyCursor(IntPtr cursorHandle);
接下來使用自己的鼠標樣式
- private void Form1_Load(object sender, EventArgs e)
- {
- Cursor myCursor = new Cursor(Cursor.Current.Handle);
- IntPtr colorCursorHandle = LoadCursorFromFile("my.cur");//鼠標圖標路徑
- myCursor.GetType().InvokeMember("handle", BindingFlags.Public |
- BindingFlags.NonPublic | BindingFlags.Instance |
- BindingFlags.SetField, null, myCursor,
- new object[] { colorCursorHandle });
- this.Cursor = myCursor;
- }
C# winForm自定義鼠標樣式方法之二
現在介紹另一種不用API方式的,鼠標樣式只需要一張背景透明的圖片就行了,png或gif格式的
寫個方法
- public void SetCursor(Bitmap cursor, Point hotPoint)
- {
- int hotX = hotPoint.X;
- int hotY = hotPoint.Y;
- Bitmap myNewCursor = new Bitmap(cursor.Width * 2 - hotX, cursor.Height * 2 - hotY);
- Graphics g = Graphics.FromImage(myNewCursor);
- g.Clear(Color.FromArgb(0, 0, 0, 0));
- g.DrawImage(cursor, cursor.Width - hotX, cursor.Height - hotY, cursor.Width,
- cursor.Height);
- this.Cursor = new Cursor(myNewCursor.GetHicon());
- g.Dispose();
- myNewCursor.Dispose();
- }
在你想要改變鼠標樣式的事件里頭使用這個方法就行了
- private void Form1_Load(object sender, EventArgs e)
- {
- Bitmap a=(Bitmap)Bitmap.FromFile("myCur.png");
- SetCursor(a, new Point(0, 0));
- } //this.btnBack.FlatStyle = FlatStyle.Flat; //set the button no frame
- //this.btnBack.FlatAppearance.BorderSize = 0;
C# winForm自定義鼠標樣式舉例:
Test.cs
- using System;
- using System.Drawing;
- using System.Windows.Forms;
- using System.Runtime.InteropServices;
- using System.Reflection;
- namespace ColorCursor
- {
- /// < summary>
- /// 本例子的作用:
- /// 在.NET中實現彩色光標,動畫光標和自定義光標。
- /// < /summary>
- public class Form1 : System.Windows.Forms.Form
- {
- [DllImport("user32.dll")]
- public static extern IntPtr LoadCursorFromFile( string fileName );
- [DllImport("user32.dll")]
- public static extern IntPtr SetCursor( IntPtr cursorHandle );
- [DllImport("user32.dll")]
- public static extern uint DestroyCursor( IntPtr cursorHandle );
- [STAThread]
- static void Main()
- {
- Application.Run(new Form1());
- }
- public Form1()
- {
- this.Text = "歡迎光臨【孟憲會之精彩世界】:http://dotnet.aspx.cc/";
- Cursor myCursor = new Cursor(Cursor.Current.Handle);
- //dinosau2.ani為windows自帶的光標:
- IntPtr colorCursorHandle = LoadCursorFromFile(@"C:\WINNT\Cursors\dinosau2.ani" );
- myCursor.GetType().InvokeMember("handle",BindingFlags.Public |
- BindingFlags.NonPublic | BindingFlags.Instance |
- BindingFlags.SetField,null,myCursor,
- new object [] { colorCursorHandle } );
- this.Cursor = myCursor;
- }
- }
- }
【編輯推薦】
責任編輯:book05
來源:
hi.baidu