C# winForm自定義鼠標(biāo)樣式的兩種方法
作者:gissky_horse
鼠標(biāo)樣式需要通過API來自定義。本文介紹了C#自定義鼠標(biāo)樣式的兩種方法,可以避免自定義鼠標(biāo)變成單色。
以前試過在C# WinForm中自定義鼠標(biāo)樣式,結(jié)果顯示出來的鼠標(biāo)變成單色。
后來百度了下,原來要用API來做。
首先引入兩個(gè)命名空間
- using System.Runtime.InteropServices;
- using System.Reflection;
C# winForm自定義鼠標(biāo)樣式方法一
導(dǎo)入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);
接下來使用自己的鼠標(biāo)樣式
- private void Form1_Load(object sender, EventArgs e)
- {
- Cursor myCursor = new Cursor(Cursor.Current.Handle);
- IntPtr colorCursorHandle = LoadCursorFromFile("my.cur");//鼠標(biāo)圖標(biāo)路徑
- myCursor.GetType().InvokeMember("handle", BindingFlags.Public |
- BindingFlags.NonPublic | BindingFlags.Instance |
- BindingFlags.SetField, null, myCursor,
- new object[] { colorCursorHandle });
- this.Cursor = myCursor;
- }
C# winForm自定義鼠標(biāo)樣式方法之二
現(xiàn)在介紹另一種不用API方式的,鼠標(biāo)樣式只需要一張背景透明的圖片就行了,png或gif格式的
寫個(gè)方法
- 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();
- }
在你想要改變鼠標(biāo)樣式的事件里頭使用這個(gè)方法就行了
- 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自定義鼠標(biāo)樣式舉例:
Test.cs
- using System;
- using System.Drawing;
- using System.Windows.Forms;
- using System.Runtime.InteropServices;
- using System.Reflection;
- namespace ColorCursor
- {
- /// < summary>
- /// 本例子的作用:
- /// 在.NET中實(shí)現(xiàn)彩色光標(biāo),動(dòng)畫光標(biāo)和自定義光標(biāo)。
- /// < /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 = "歡迎光臨【孟憲會(huì)之精彩世界】:http://dotnet.aspx.cc/";
- Cursor myCursor = new Cursor(Cursor.Current.Handle);
- //dinosau2.ani為windows自帶的光標(biāo):
- 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;
- }
- }
- }
【編輯推薦】
責(zé)任編輯:book05
來源:
hi.baidu