[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;
            }
        }

 

 

 

 

目录
相关文章
|
C# 虚拟化 索引
【WPF】UI虚拟化之------自定义VirtualizingWrapPanel
原文:【WPF】UI虚拟化之------自定义VirtualizingWrapPanel 前言 前几天QA报了一个关于OOM的bug,在排查的过程中发现,ListBox控件中被塞入了过多的Item,而ListBox又定义了两种样式的ItemsPanelTemplate。
2023 0
|
C# 数据安全/隐私保护
【WPF】右下角弹出自定义通知样式(Notification)——简单教程
原文:【WPF】右下角弹出自定义通知样式(Notification)——简单教程 1.先看效果 2.实现 1.主界面是MainWindow 上面就只摆放一个Button即可。
2815 0
|
前端开发 C# 图形学
【WPF】WPF开发用户控件、用户控件属性依赖DependencyProperty实现双向绑定、以及自定义实现Command双向绑定功能演示
Wpf开发过程中,最经常使用的功能之一,就是用户控件(UserControl)了。用户控件可以用于开发用户自己的控件进行使用,甚至可以用于打造一套属于自己的UI框架。依赖属性(DependencyProperty)是为用户控件提供可支持双向绑定的必备技巧之一,同样用处也非常广泛。
783 0
【WPF】WPF开发用户控件、用户控件属性依赖DependencyProperty实现双向绑定、以及自定义实现Command双向绑定功能演示
|
C#
WPF 4 DataGrid 控件(自定义样式篇)
原文:WPF 4 DataGrid 控件(自定义样式篇)      在《WPF 4 DataGrid 控件(基本功能篇)》中我们已经学习了DataGrid 的基本功能及使用方法。本篇将继续介绍自定义DataGrid 样式的相关内容,其中将涉及到ColumnHeader、RowHeader、Row、Cell 的各种样式设置。
2467 0
|
C#
WPF 控件自定义背景
<!--控件要设置尺寸的话,设置的尺寸必须比下面的图形的尺寸要小,不然显示不开--> <Label Content="直角测试" Width="90" Height="90" HorizontalContentAlignment="Center" Vert...
984 0
|
C#
WPF开发-Label自定义背景-Decorator
首先在App.xaml文件当中添加样式和模板
1957 0
|
C#
wpf 开发 -TextBox背景自定义-Decorator
首先在app.xaml文件的下面添加以下样式
1630 0
|
C# 开发工具 git
WPF实现选项卡效果(3)——自定义动态添加的AvalonDock选项卡内容
原文:WPF实现选项卡效果(3)——自定义动态添加的AvalonDock选项卡内容 简介   在前面一篇文章里面,我们实现了AvalonDock选项卡的动态添加,但是对于选项卡里面的内容,我们并没有实现任何有用的功能。
1292 0
|
C#
WPF中自定义的DataTemplate中的控件,在Window_Loaded事件中加载机制初探
原文:WPF中自定义的DataTemplate中的控件,在Window_Loaded事件中加载机制初探         最近因为项目需要,开始学习如何使用WPF开发桌面程序。
1491 0
|
C#
如何自定义WPF项目的Main函数
原文:如何自定义WPF项目的Main函数   与Winform项目不同,WPF项目的Main函数在项目生成的时候,系统自动在后台为我们生成。
803 0