当前位置:  编程技术>.net/c#/asp.net

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

    来源: 互联网  发布时间:2014-10-21

    本文导语:  第一种:(调用系统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 In...

第一种:(调用系统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));
        }


    
 
 

您可能感兴趣的文章:

  • 解决C#中WebBrowser的DocumentCompleted事件不执行的实现方法
  • C# mysql 插入数据,中文乱码的解决方法
  • C# WinForm程序完全退出的问题解决
  • 解决C#获取鼠标相对当前窗口坐标的实现方法
  • 使用C# Winform应用程序获取网页源文件的解决方法
  • 使用C#获取系统特殊文件夹路径的解决方法
  • C#窗体程序仅允许启动一次的解决方法
  • C# 使用匿名函数解决EventHandler参数传递的难题
  • C#操作FTP出现500错误解决办法
  • c#使用process.start启动程序报错解决方法
  • C#线程间不能调用剪切板的解决方法
  • C# Mysql 查询 Rownum的解决方法
  • C# HttpClient Cookie验证解决方法
  • 解决C# X64应用程序中读取WParam溢出的问题
  • C# KeyUp事件中MessageBox的回车(Enter)键回调问题解决方案
  • C#中将字符串转换为整型的三种解决方法总结
  • 解决C#中取消方向键对控件焦点控制的实现方法
  • C#百万数据查询出现超时问题的解决方法
  • C#利用com操作excel释放进程的解决方法
  • c#使用nsoup解析html乱码解决方法分享 nsoup教程
  • HTML <!DOCTYPE> 标签用法详解及如何解决<!DOCTYPE html>未声明时导致页面无效的问题
  • 解决C++中事件不响应的方法详解
  • 探讨:sql插入空,默认1900-01-01 00:00:00.000的解决方法详解
  • 解决无法在unicode和非unicode字符串数据类型之间转换的方法详解
  • 解决C++ 无法从void 转换为LRESULT的方法详解
  • 解决plsql连接失败,弹出空白提示框的方法详解
  • 解决MyEclipse6.5无法启动,一直停留刚开始启动界面的详解
  • C++中用substr()函数消除前后空格的解决方法详解
  • 基于ORA-12170 TNS 连接超时解决办法详解
  • 解决Fedora14下eclipse进行android开发,ibus提示没有输入窗口的方法详解
  • windows环境中mysql忘记root密码的解决方法详解
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 解决ie动态修改link样式,import css不刷新的问题
  • IE对CSS样式表的限制分析与解决方案
  • Android下修改SeekBar样式的解决办法
  • secureCRT下Linux终端汉字乱码解决方法
  • VS2005解决方案管理器中不显示解决方案节点的解决办法
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • 有高手能破解RAR的密码吗,至今没有找到人能解决?(先只给10分意思意思,若解决,至少给解决的人500分!说话算话!)
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • 解决 select 挡住div的解决方法
  • window.onload事件覆盖掉body onload事件(window.onload和html body onload事件冲突)解决办法
  • 奇怪,怎么“已解决”问题只有4页(10/17日之后的),以前的已解决问题到哪里看?
  • sharepoint 2010中item.Update()和item.SystemUpdate 修改数据版本问题解决
  • 解决!解决!求助如何安装多系统!
  • andriod中UIScrollView无法正常滚动的解决方法
  • 解决多级索引速度慢的问题可否像解决多级页表那样使用TLB?
  • 错误:将'const x'作为'x'的'this'实参时丢弃了类型限定问题解决
  • Liunx命令tar压缩出现如下错误该怎么解决?急需解决!感谢
  • vs2010下禁用vmware的方法以及解决vmware插件导致vs2010变慢的问题
  • 求数据库解决方案===求数据库解决方案
  • windows server2008上PowerBuilder程序系统错误解决方法
  • MYSQL安装时解决要输入current root password的解决方法
  • Linux/CentOS下的CST和UTC时间的区别以及不一致的解决方法
  • 解决oracle用户连接失败的解决方法
  • Linux下时钟同步问题:Clock skew detected原因分析及解决方法
  • 呵呵,前段时间Ubuntu服务器版的问题总算解决了,解决方法就是重新安装桌面版-_-!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3