[WPF]自定义鼠标指针
2024-08-28 07:29:38
原文:[WPF]自定义鼠标指针
[WPF]自定义鼠标指针
周银辉
看看WPF Cursor类的两个构造函数吧:
public Cursor(Stream cursorStream)public Cursor(string cursorFile)
恩, 均要求用 ani 或 cur, 无语啊,我要使用一张普通图片呢? 或者甚至是在程序内存中动态生成一张图片而生成鼠标指针呢?
于是乎, 我们可以折腾出如下代码, 它可以从由一张图片来创建鼠标指针:
/// <summary> /// This class allow you create a Cursor form a Bitmap /// </summary> internal class BitmapCursor : SafeHandle { public override bool IsInvalid { get { return handle == (IntPtr)(-); } } public static Cursor CreateBmpCursor(Bitmap cursorBitmap) { var c = new BitmapCursor(cursorBitmap); return CursorInteropHelper.Create(c); } protected BitmapCursor(Bitmap cursorBitmap) : base((IntPtr)(-), true) { handle = cursorBitmap.GetHicon(); } protected override bool ReleaseHandle() { bool result = DestroyIcon(handle); handle = (IntPtr)(-); return result; } [DllImport("user32")] private static extern bool DestroyIcon(IntPtr hIcon); }
下面是一段示例代码:
private static Cursor CreateMyCursor() { const int w = ; const int h = ; const int f = ; var bmp = new Bitmap(w, h); Graphics g = Graphics.FromImage(bmp); g.SmoothingMode = SmoothingMode.HighQuality; g.InterpolationMode = InterpolationMode.HighQualityBicubic; var pen = new Pen(Brushes.Black, 2.0F); g.DrawEllipse(pen, new Rectangle(f, f, w - * f, w - * f)); g.Flush(); g.Dispose(); pen.Dispose(); return BitmapCursor.CreateBmpCursor(bmp); }
有人会说"啊!Bitmap? WinForm的! 就不可以从WPF的图像来生成么?"
那么免费赠送如下函数:
public static Bitmap BitmapSourceToBitmap(this BitmapSource source) { using (var stream = new MemoryStream()) { var e = new BmpBitmapEncoder(); e.Frames.Add(BitmapFrame.Create(source)); e.Save(stream); var bmp = new Bitmap(stream); return bmp; } }
最新文章
- Implicit and Explicit Multithreading MULTITHREADING AND CHIP MULTIPROCESSORS
- Deep Learning: Activation Function
- linux ps命令详解
- JavaScript 正则表达式相关理解
- Nhibernate cookbook 3.0-翻译
- EasyUI中combotree允许多选的时候onSelect事件会重复触发onCheck事件
- 【java】利用异常机制,往前台写错误信息
- [转] Linux下查看文件和文件夹大小
- 优雅高效的MyBatis-Plus工具快速入门使用
- 《深入理解计算机系统》【PDF】下载
- windows下搭建virtualenv虚拟环境
- 在python中使用print()时,raw write()返回无效的长度:OSError: raw write() returned invalid length 254 (should have been between 0 and 127)
- HTML5-2
- 洛谷P4723 【模板】线性递推(多项式取模 线性代数)
- 通过URL传递中文参数的乱码处理
- (转载)Android开发——Android中常见的4种线程池(保证你能看懂并理解)
- (一 ) 天猫精灵接入Home Assistant-服务器搭建
- parent.relativePath&#39; points at wrong local POM
- Git_简介
- 转载:QT QTableView用法小结
热门文章
- showSoftInput不起作用
- 删除GitHub上项目中的某个文件
- hdu 2577 How to Type(DP)
- php实现把二叉树打印成多行(谋而后动,写好算法思路,不然浪费超多时间而且还是错误代码,而且精力消耗会导致代码正确率下降以及低级错误)
- Qt5 编译 &; 打包依赖dll发布
- ITFriend创业阶段的服务器环境搭建手册
- CSS自己主动换行、强制不换行、强制断行、超出显示省略号
- 使用Ant包装时,包javax.servlet.http有没有搞错
- Tricks(四十七)—— 布尔矩阵(0-1矩阵)取反
- spark 基于key排序的wordcount