文档库 最新最全的文档下载
当前位置:文档库 › C# winForm自定义鼠标样式的两种方法

C# winForm自定义鼠标样式的两种方法

以前试过在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 = "欢迎光临【孟宪会之精彩世界】:https://www.wendangku.net/doc/e14642351.html,/";
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;
}
}
}

相关文档
相关文档 最新文档