原文:[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;            }        }

[WPF]自定义鼠标指针的更多相关文章

  1. css Cursor:url()自定义鼠标指针样式为图片

    css自定义鼠标指针样式为图片Cursor:url()的使用,今天在项目中,要用到自定义鼠标样式,格式: css:{cursor:url('绝对路径的图片(格式:cur,ico)'),-moz-zoo ...

  2. [WPF]获取鼠标指针下的元素

    原文:[WPF]获取鼠标指针下的元素   [WPF]获取鼠标指针下的元素 周银辉 以前写过一些GetElementUnderMouse之类的函数,要用到坐标换算而显得有些麻烦(特别是当元素有XXXTr ...

  3. 006-unity3d GUI初识、贴图、自定义鼠标指针

    一.gui概念 无论摄像机拍摄到的图像怎么变换,GUI永远显示在屏幕上,不受变形.碰撞.光照的影响.对话框.战斗值.能量等.示例:用手机录像,摄像的参数不会随着拍摄场景变换.GUI基础GUI部分是每帧 ...

  4. WPF 自定义鼠标光标

    在程序中使用自定义鼠标光标的三种方式: RadioButton senderButton = sender as RadioButton; 方式一:                       str ...

  5. [ActionScript 3.0] AS3.0 本机鼠标指针

    Flash Player 10.2添加了内置的本机鼠标指针(native mouse cursor)支持,虽然在之前的版本里我们可以侦听MouseEvent事件来模拟鼠标指针,但是在有了原生的本机鼠标 ...

  6. 自定义鼠标Cursor转变成图片

    今天无意做到项目遇到一个好玩的事情,就是当我鼠标移到一个链接上面,并不是像正常那样出现一个小手,而是变成一个小十字架, 下面看图当时第一眼看到总感觉哪里不对,噢噢噢噢 这样的 小手没了,居然是一个图片 ...

  7. c#自定义鼠标形状

    更改鼠标指针,需要使用到 Windows API: 1. 添加命名空间的引用: using System.Runtime.InteropServices; using System.Reflectio ...

  8. C#、WPF中如何自定义鼠标样式

    需求:在C#中如何自定义鼠标样式?在这里可以分两种情况,一种是在winForm,另一种是在WPF中(注意使用的Cursor对象不一样) 解决办法如下: a.首先针对WinForm中,我们可以采用图标加 ...

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

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

随机推荐

  1. Opencv分水岭算法——watershed自动图像分割用法

    分水岭算法是一种图像区域分割法,在分割的过程中,它会把跟临近像素间的相似性作为重要的参考依据,从而将在空间位置上相近并且灰度值相近的像素点互相连接起来构成一个封闭的轮廓,封闭性是分水岭算法的一个重要特 ...

  2. 关于stm32的RAM大小

  3. 使用ionic3快速开发webapp(二)

    本文整理了使用ionic3开发时会用到的一些最基本组件及用法 1.ion-tabs 最常见的通过标签切换页面: tabs.html <ion-tabs> <ion-tab [root ...

  4. iOS开发之Quartz2D 五:UIKIT 绘图演练,画文字,画图片

    #import "DrawView.h" @implementation DrawView -(void)awakeFromNib { // //画图片 // UIImage *i ...

  5. html 页面 黑白

    css代码,写在最顶端 html {filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);-webkit-filter: ...

  6. thinkphp缩略图

    <?php class IndexAction extends Action { public function index() { $Photo = M('Photo'); $list = $ ...

  7. iOS开发之Quartz2D 二:绘制直线,曲线,圆弧,矩形,椭圆,圆

    #import "DrawView.h" @implementation DrawView /** * 作用:专门用来绘图 * 什么时候调用:当View显示的时候调用 * @par ...

  8. c++ 成员函数指针

    C++中,成员指针是最为复杂的语法结构.但在事件驱动和多线程应用中被广泛用于调用回叫函数.在多线程应用中,每个线程都通过指向成员函数的指针来调用该函数.在这样的应用中,如果不用成员指针,编程是非常困难 ...

  9. js进阶 10-7 简单的伪类选择器可以干什么

    js进阶 10-7 简单的伪类选择器可以干什么 一.总结 一句话总结:伪类选择器是冒号. 1.学而不用,有什么用? 多用啊,在项目中多用 2.简单的伪类选择器可以干什么? 除某元素以外,某元素的一切索 ...

  10. 【a402】十进制数转换为八进制数

    Time Limit: 1 second Memory Limit: 32 MB [问题描述] 用递归算法把任一给定的十进制正整数m(m≤32000)转换成八进制数输出.(要求:同学在做本题时用递归和 ...