本文转自:http://www.cnblogs.com/hzbzxm/archive/2008/09/15/1291104.html
以前试过在WinForm中自定义鼠标样式,结果显示出来的鼠标变成单色。
后来百度了下,原来要用API来做。
首先引入两个命名空间
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
using
System.Runtime.InteropServices;
using
System.Reflection;
导入API
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
[DllImport(
"
user32.dll
"
)]
public
static
extern
IntPtrLoadCursorFromFile(
string
fileName);
[DllImport(
"
user32.dll
"
)]
public
static
extern
IntPtrSetCursor(IntPtrcursorHandle);
[DllImport(
"
user32.dll
"
)]
public
static
extern
uint
DestroyCursor(IntPtrcursorHandle);
接下来使用自己的鼠标样式
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
private
void
Form1_Load(
object
sender,EventArgse)
{
CursormyCursor
=
new
Cursor(Cursor.Current.Handle);
IntPtrcolorCursorHandle
=
LoadCursorFromFile(
"my
.cur
"
);
//
鼠标图标路径
myCursor.GetType().InvokeMember(
"
handle
"
,BindingFlags.Public
|
BindingFlags.NonPublic
|
BindingFlags.Instance
|
BindingFlags.SetField,
null
,myCursor,
new
object
[]{colorCursorHandle});
this
.Cursor
=
myCursor;
}
现在介绍另一种不用API方式的,鼠标样式只需要一张背景透明的图片就行了,png或gif格式的
写个方法
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
public
void
SetCursor(Bitmapcursor,PointhotPoint)
{
int
hotX
=
hotPoint.X;
int
hotY
=
hotPoint.Y;
BitmapmyNewCursor
=
new
Bitmap(cursor.Width
*
2
-
hotX,cursor.Height
*
2
-
hotY);
Graphicsg
=
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();
}
在你想要改变鼠标样式的事件里头使用这个方法就行了
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
private
void
Form1_Load(
object
sender,EventArgse)
{
Bitmapa
=
(Bitmap)Bitmap.FromFile(
"
myCur.png
"
);
SetCursor(a,
new
Point(
0
,
0
));
}