博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[WPF]自定义鼠标指针
阅读量:6962 次
发布时间:2019-06-27

本文共 1643 字,大约阅读时间需要 5 分钟。

原文:

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

 

 

 

 

转载地址:http://rywsl.baihongyu.com/

你可能感兴趣的文章
easyui的分页组件的displayMsg显示的信息不正确
查看>>
MySQL数据库入门——多实例配置
查看>>
ACtiiveMQ安装 Ubuntu
查看>>
四色原则
查看>>
1.sql数据处理问题
查看>>
企业管理:如何规范员工上网行为,提高员工工作效率
查看>>
LINUX创建、删除用户和用户组;修改密码
查看>>
深入理解乐观锁与悲观锁
查看>>
CocoaPods的使用
查看>>
find命令详解
查看>>
变频电源内部IGBT模块的作用是什么样的
查看>>
手机PDF文件怎么压缩得更小,PDF文件如何压缩?
查看>>
超声波清洗机对人体有辐射,有伤害吗?
查看>>
区块链成多地政府工作报告新热词
查看>>
论职场沟通的重要性
查看>>
velocity模板中后台返回html,前端无法跳转页面
查看>>
AJPFX:如何保证对象唯一性呢?
查看>>
天禹智控--现场标准气体如何使用?
查看>>
CSS3:border-radius隐藏的威力
查看>>
springMVC 返回类型选择 以及 SpringMVC中model,modelMap
查看>>