zoukankan      html  css  js  c++  java
  • [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;
                }
            }
  • 相关阅读:
    我的安卓开始
    OLAP的一些知识——接下去的项目需要的背景
    关于Java接口
    Hexo+Github/Coding免费搭建个人博客网站
    手机自带输入法emoji表情的输入,提交及显示——前端解决方案
    改变函数中的 this 指向——神奇的call,apply和bind及其应用
    什么是jsonp?——使用jsonp解决跨域请求问题
    玩转angularJs——通过自定义ng-model,不仅仅只是input可以实现双向数据绑定
    利用jquery mobiscroll插件选择日期、select、treeList的具体运用
    转载:中年程序猿的迷茫,你还在深究技术吗?
  • 原文地址:https://www.cnblogs.com/zhouyinhui/p/1746502.html
Copyright © 2011-2022 走看看