欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

解决C# winForm自定义鼠标样式的两种实现方法详解

程序员文章站 2023-12-18 17:10:46
第一种:(调用系统api)首先引入两个命名空间复制代码 代码如下:using system.runtime.interopservices;using system.ref...
第一种:(调用系统api)
首先引入两个命名空间
复制代码 代码如下:

using system.runtime.interopservices;
using system.reflection;

导入api
复制代码 代码如下:

[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);

接下来使用自己的鼠标样式
复制代码 代码如下:

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;
        }

第二种:(不用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));
        }

上一篇:

下一篇: