zoukankan      html  css  js  c++  java
  • 【WPF】自定义鼠标样式

     /// <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);
            }
    
            public static Bitmap BitmapSourceToBitmap(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;
                }
            }
    
            protected BitmapCursor(Bitmap cursorBitmap)
                : base((IntPtr)(-1), true)
            {
                handle = cursorBitmap.GetHicon();
            }
    
            protected override bool ReleaseHandle()
            {
                bool result = DestroyIcon(handle);
    
                handle = (IntPtr)(-1);
    
                return result;
            }
    
            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);
            }
    
            [DllImport("user32")]
            private static extern bool DestroyIcon(IntPtr hIcon);
        }

    WPF 中每个光标通过一个System.Windows.Input.Cursor表示,获取Cursor对象的最简单方法是使用Cursor类(位于System.Windows.Input名称空间)的静态属性。

    如:

    this.Cursor=Cursors.wait;  或<Button Cursor="wait">help</Button>

    但是有一个例外,通过使用ForceCursor属性,父元素会覆盖子元素的光标位置,当把该属性设置为true时,会忽略子元素的Cursor属性,并且父元素的光标会被应用到内部的所有内容。

    为了移除应用程序范围的光标覆盖设置,需要将Mouse.OverrideCursor属性设置为null

  • 相关阅读:
    Python小工具:统计代码行数
    计算机图形学复习(一)
    牛客多校训练第一场 J.Different Integers
    数据校验码概述
    数据库复习第二章
    数据库复习第一章
    自动化AC器(带界面版)
    ZOJ 3747 Attack on Titans
    Codeforces Round #245 (Div. 1) B. Working out
    HDU 6266 Hakase and Nano 【博弈论】
  • 原文地址:https://www.cnblogs.com/mqxs/p/9925203.html
Copyright © 2011-2022 走看看