需求:在C#中如何自定义鼠标样式?在这里可以分两种情况,一种是在winForm,另一种是在WPF中(注意使用的Cursor对象不一样)

解决办法如下:

a.首先针对WinForm中,我们可以采用图标加载方式,代码如下:(这种情况用在普通控件上,但在MouseMove事件中使用,移动时鼠标会一直跳动)

public void SetCursor(System.Drawing.Bitmap cursor)

{

try

{

System.Drawing.Bitmap newCursor = new System.Drawing.Bitmap(cursor.Width, cursor.Height); ;

System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(newCursor);

g.Clear(System.Drawing.Color.FromArgb(0, 0, 0, 0));

g.DrawImage(cursor, 0, 0, cursor.Width, cursor.Height);

System.Windows.Forms.Cursor.Current = new System.Windows.Forms.Cursor(newCursor.GetHicon());

g.Dispose();

newCursor.Dispose();

}

catch (Exception)

{

return;

}

}

b.针WPF中,它使用的鼠标对象为Cursor对象,而Cursor实例中有只有Stream与.ani、.cur文件等,而这类的文件又不要创建,没有直接使用图标引用来的快,下面这种方法就可以直接使用图标来引用(并且移动鼠标时,也不会有跳动现象,,但这里需要提醒下,网上有种类似的方法,它未继承SafeHandle类,导致使用时会产生内存泄漏问题,请谨慎使用)

internal class BitmapCursor:System.Runtime.InteropServices.SafeHandle

{

public override bool IsInvalid

{

get { return handle == (IntPtr)(-1); }

}

public static Cursor CreateBmpCursor(System.Drawing.Bitmap cursorBitmap)

{

var c = new BitmapCursor(cursorBitmap);

return System.Windows.Interop.CursorInteropHelper.Create(c);

}

protected BitmapCursor(System.Drawing.Bitmap cursorBitmap)

:base((IntPtr)(-1),true)

{

handle = cursorBitmap.GetHicon();

}

protected override bool ReleaseHandle()

{

bool result = DestroyIcon(handle);

handle = (IntPtr)(-1);

return result;

}

[System.Runtime.InteropServices.DllImport("user32.dll")]

public static extern bool DestroyIcon(IntPtr hIcon);

}

本人项目中使用的是WPF中自定义的鼠标,测试过,没有内存泄漏问题,放心使用。

C#、WPF中如何自定义鼠标样式的更多相关文章

  1. CSharp如何自定义鼠标样式

    一.如何设置鼠标样式? 在CSharp的WinForm开发中,可以通过下面的API设置鼠标样式: //把鼠标样式设置为十字(系统自带的一种鼠标样式) this.Cursor = Cursors.Cro ...

  2. Android:系统自定义鼠标样式切换

    一.APP通过View修改鼠标样式 app view上修改鼠标样式比较简单,通过 hover event 获取鼠标坐标并使用如下方法修改为自定义图片: getWindow().getDecorView ...

  3. WPF中实现自定义虚拟容器(实现VirtualizingPanel)

    WPF中实现自定义虚拟容器(实现VirtualizingPanel) 在WPF应用程序开发过程中,大数据量的数据展现通常都要考虑性能问题.有下面一种常见的情况:原始数据源数据量很大,但是某一时刻数据容 ...

  4. WPF编程,自定义鼠标形状的一种方法。

    原文:WPF编程,自定义鼠标形状的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/details/8727 ...

  5. VS编程,WPF中,获取鼠标相对于当前屏幕坐标的一种方法

    原文:VS编程,WPF中,获取鼠标相对于当前屏幕坐标的一种方法 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/det ...

  6. VS编程,WPF中,获取鼠标相对于当前程序窗口的坐标的一种方法

    原文:VS编程,WPF中,获取鼠标相对于当前程序窗口的坐标的一种方法 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/ ...

  7. Arcgis for javascript不同的状态下自定义鼠标样式

    俗话说:爱美之心,人皆有之.是的,没错,即使我只是一个做地图的,我也希望自己的地图看起来好看一点.在本文,给大家讲讲在Arcgis for javascript下如何自定义鼠标样式. 首先,说几个状态 ...

  8. 【WPF】自定义鼠标样式

    /// <summary> /// This class allow you create a Cursor form a Bitmap /// </summary> inte ...

  9. ArcGIS AddIN开发之自定义鼠标样式

    如果想修改Windows默认的鼠标样式,可以这样 //设置鼠标样式 this.Cursor = System.Windows.Forms.Cursors.Cross; 可是如果想设置成一些自定义的很好 ...

随机推荐

  1. 尴尬的事情又发生Newtonsoft.Json vs Protobuf.net

    写程序做下性能测试都是例行的事情了,一般在普通电脑上测试一下如果比较理想那基本不出什么意外!但世事难料,代码写得不好经常担心CPU不够用,其实写得好但不能完全发挥出CPU资源的优势更是一件悲剧的事情! ...

  2. Asp.Net Core 轻松学-HttpClient的演进和避坑

    前言     在 Asp.Net Core 1.0 时代,由于设计上的问题, HttpClient 给开发者带来了无尽的困扰,用 Asp.Net Core 开发团队的话来说就是:我们注意到,HttpC ...

  3. mysql触发器new和old

    下面为您介绍mysql触发器new old的相关知识,供您参考学习,如果您在mysql触发器方面遇到过类似的问题,不妨一看,相信对您会有所帮助. mysql触发器new old: "NEW ...

  4. 从零讲解搭建一个NIO消息服务端

    本文首发于本博客,如需转载,请申明出处. 假设 假设你已经了解并实现过了一些OIO消息服务端,并对异步消息服务端更有兴趣,那么本文或许能带你更好的入门,并了解JDK部分源码的关系流程,正如题目所说,笔 ...

  5. Eclipse中安装git后pull远程仓库出现错误解决方法

    该图中位置为false 在配置文件中添加如下语句 -Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2

  6. 给dao层注入jdbcTemplate时的一个强行bug(jdbcDaoSupport不要随便用!用了要记得!)

    记录Dao层一个鱼唇至极的错误 这一天我在使用Spring的进行注解配置项目时, 我的Idea给我抛了一个如下的错误: Exception in thread "main" org ...

  7. qsv文件转码mp4格式过程记录

    之前帮一个朋友剪辑配音视频,源文件在爱奇艺里,特有的qsv格式让我白忙活一下午. 晚上趁着有空,在网上查找资料,翻阅了很多文件,都让我无从下手. 基本都是一个套路,转成fiv格式,再转mp4格式,但是 ...

  8. 总结安装webpack过程中遇到的错误及解决方案

    1.安装不成功的报错: 解决方案:清除缓存 2.打包不成功: 解决方案:填写打包路径时的“__dirname”有两个下划线 3.打包报错: 解决方案:正确填写路径为“./style.css”

  9. Cesium 绘制点、线、面和测距

    本文基于ES6,采用React+Cesium的Webgis前端开发框架,目前threejs和cesium的结合正在研究中.此段代码采用原生javascript,可能过程中用到了es6的扁平化语法,如( ...

  10. Kotlin 扩展——省略findViewById

    现在 Kotlin 安卓扩展插件能够提供与这些开源库功能相同的体验,不需要添加任何额外代码. import kotlinx.android.synthetic.main.activity_main.* ...