网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 设计资源 > .Net编程 > 正文

[WPF]自定义鼠标指针

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

看看WPF Cursor类的两个构造函数吧:

  1. public Cursor(Stream cursorStream) 
  2. public Cursor(string cursorFile) 

恩, 均要求用 ani 或 cur, 无语啊,我要使用一张普通图片呢? 或者甚至是在程序内存中动态生成一张图片而生成鼠标指针呢?

于是乎, 我们可以折腾出如下代码, 它可以从由一张图片来创建鼠标指针:

  1. /// <summary> 
  2.   /// This class allow you create a Cursor form a Bitmap 
  3.   /// </summary> 
  4.   internal class BitmapCursor : SafeHandle 
  5.   { 
  6.  
  7.       public override bool IsInvalid 
  8.       { 
  9.           get 
  10.           { 
  11.               return handle == (IntPtr)(-1); 
  12.           } 
  13.       } 
  14.  
  15.  
  16.       public static Cursor CreateBmpCursor(Bitmap cursorBitmap) 
  17.       { 
  18.  
  19.           var c = new BitmapCursor(cursorBitmap); 
  20.  
  21.           return CursorInteropHelper.Create(c); 
  22.       } 
  23.  
  24.  
  25.  
  26.       protected BitmapCursor(Bitmap cursorBitmap) 
  27.           : base((IntPtr)(-1), true
  28.       { 
  29.           handle = cursorBitmap.GetHicon(); 
  30.       } 
  31.  
  32.  
  33.       protected override bool ReleaseHandle() 
  34.       { 
  35.           bool result = DestroyIcon(handle); 
  36.  
  37.           handle = (IntPtr)(-1); 
  38.  
  39.           return result; 
  40.       } 
  41.  
  42.       [DllImport("user32")] 
  43.       private static extern bool DestroyIcon(IntPtr hIcon); 
  44.   } 

下面是一段示例代码:

  1. private static Cursor CreateMyCursor() 
  2.         { 
  3.             const int w = 25; 
  4.             const int h = 25; 
  5.             const int f = 4; 
  6.  
  7.             var bmp = new Bitmap(w, h); 
  8.  
  9.             Graphics g = Graphics.FromImage(bmp); 
  10.             g.SmoothingMode = SmoothingMode.HighQuality; 
  11.             g.InterpolationMode = InterpolationMode.HighQualityBicubic; 
  12.  
  13.             var pen = new Pen(Brushes.Black, 2.0F); 
  14.  
  15.             g.DrawEllipse(pen, new Rectangle(f, f, w - 2 * f, w - 2 * f)); 
  16.  
  17.             g.Flush(); 
  18.             g.Dispose(); 
  19.             pen.Dispose(); 
  20.  
  21.             return BitmapCursor.CreateBmpCursor(bmp); 
  22.         } 

有人会说"啊!Bitmap? WinForm的! 就不可以从WPF的图像来生成么?"
那么免费赠送如下函数:

  1. public static Bitmap BitmapSourceToBitmap(this BitmapSource source) 
  2.         { 
  3.             using (var stream = new MemoryStream()) 
  4.             { 
  5.                 var e = new BmpBitmapEncoder(); 
  6.                 e.Frames.Add(BitmapFrame.Create(source)); 
  7.                 e.Save(stream); 
  8.  
  9.                 var bmp = new Bitmap(stream); 
  10.  
  11.                 return bmp; 
  12.             } 
  13.         } 
  • 上一篇资讯: C#获取URL参数值
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师