[WPF]自定义鼠标指针

简介: 原文:[WPF]自定义鼠标指针                                                       [WPF]自定义鼠标指针                                                              周银辉...
原文: [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)( - 1 );
            }
        }


        
public   static  Cursor CreateBmpCursor(Bitmap cursorBitmap)
        {

            var c 
=   new  BitmapCursor(cursorBitmap);

            
return  CursorInteropHelper.Create(c);
        }



        
protected  BitmapCursor(Bitmap cursorBitmap)
            : 
base ((IntPtr)( - 1 ),  true )
        {
            handle 
=  cursorBitmap.GetHicon();
        }


        
protected   override   bool  ReleaseHandle()
        {
            
bool  result  =  DestroyIcon(handle);

            handle 
=  (IntPtr)( - 1 );

            
return  result;
        }

        [DllImport(
" user32 " )]
        
private   static   extern   bool  DestroyIcon(IntPtr hIcon);
    }

 

下面是一段示例代码:

         private   static  Cursor CreateMyCursor()
        {
            
const   int  w  =   25 ;
            
const   int  h  =   25 ;
            
const   int  f  =   4 ;

            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  -   2   *  f, w  -   2   *  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;
            }
        }

 

 

 

 

目录
相关文章
|
3月前
|
开发框架 缓存 前端开发
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件
|
3月前
|
开发框架 前端开发 JavaScript
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(3)--自定义用户控件
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(3)--自定义用户控件
|
3月前
|
C#
WPF 自定义可拖动标题栏
WPF 自定义可拖动标题栏
48 0
|
4月前
超好看的鼠标指针 折纸Gami
折纸风格的鼠标指针、共九种颜色风格:白、橙、粉、红、黄、蓝、绿、青、紫;三种尺寸:X32、X48、X64;一般情况下100%DPI推荐使用X48、大于125%DPI推荐使用X64版本!
79 6
|
3月前
|
开发框架 前端开发 C#
使用WPF开发自定义用户控件,以及实现相关自定义事件的处理
使用WPF开发自定义用户控件,以及实现相关自定义事件的处理
|
6月前
|
Java 容器
自定义数据类型中的空指针异常
自定义数据类型中的空指针异常
46 2
|
6月前
|
存储 安全 数据库连接
【C++智能指针】深入探究C++智能指针:自定义删除器的设计与选择
【C++智能指针】深入探究C++智能指针:自定义删除器的设计与选择
313 0
|
XML JavaScript 前端开发
使用 JavaScript 更改鼠标指针
使用 JavaScript 更改鼠标指针
141 0
改变鼠标指针样式的方法【项目优化——cursor】
改变鼠标指针样式的方法【项目优化——cursor】
116 0
|
前端开发 C# 图形学
【WPF】WPF开发用户控件、用户控件属性依赖DependencyProperty实现双向绑定、以及自定义实现Command双向绑定功能演示
Wpf开发过程中,最经常使用的功能之一,就是用户控件(UserControl)了。用户控件可以用于开发用户自己的控件进行使用,甚至可以用于打造一套属于自己的UI框架。依赖属性(DependencyProperty)是为用户控件提供可支持双向绑定的必备技巧之一,同样用处也非常广泛。
939 0
【WPF】WPF开发用户控件、用户控件属性依赖DependencyProperty实现双向绑定、以及自定义实现Command双向绑定功能演示