Wpf中鼠标样式的修改,作用点修改
2018-06-18 01:18:41来源:未知 阅读 ()
最近,在做一个控件的鼠标样式,Ps加了插件,可以编辑生成.cur格式的图标。可是,所有的改完以后,调试运行,结果发现自己制作的图标的作用点总是在左上角,而不是在“手形”图标的食指上...所以,问题来了,怎么修改鼠标样式的作用点呢?百度半天无果,自己琢磨半天,cursor这个东东没有什么可以使用的其它属性。后来,在逛StackOverflow的时候,偶然发现了一个提问,找到点有用的东西:
原地址:http://stackoverflow.com/questions/46805/custom-cursor-in-wpf
感谢万能的StackOverflow,顺便吐槽一下百度。
其实文章中我找到的是一个词:hotspot,即“热点”。阅读代码可以发现这就是我们要的。
文中提出了制作鼠标样式的方法,这些方法都好说,我们关注的是修改作用点,观察文中提到的方法,都是通过向stream中写字节的方法实现,个人觉得比较麻烦且费时。于是想,大家改stream,那么是不是.cur中可以直接对其进行设置呢
public Cursor ConvertToCursor(FrameworkElement visual, Point hotSpot) { int width = (int)visual.Width; int height = (int)visual.Height; // Render to a bitmap var bitmapSource = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32); bitmapSource.Render(visual); // Convert to System.Drawing.Bitmap var pixels = new int[width*height]; bitmapSource.CopyPixels(pixels, width, 0); var bitmap = new System.Drawing.Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppPArgb); for(int y=0; y<height; y++) for(int x=0; x<width; x++) bitmap.SetPixel(x, y, Color.FromArgb(pixels[y*width+x])); // Save to .ico format var stream = new MemoryStream(); System.Drawing.Icon.FromHandle(resultBitmap.GetHicon()).Save(stream); // Convert saved file into .cur format stream.Seek(2, SeekOrigin.Begin); stream.WriteByte(2); stream.Seek(10, SeekOrigin.Begin); stream.WriteByte((byte)(int)(hotSpot.X * width)); stream.WriteByte((byte)(int)(hotSpot.Y * height)); stream.Seek(0, SeekOrigin.Begin); // Construct Cursor return new Cursor(stream); }
于是,便回到百度键入刚刚知道的关键词 hotspot cursor ,又是一通搜索,终于,功夫不负有心人,找到一篇有用的文章:
http://blog.sina.com.cn/s/blog_4f8d956b0100nj9i.html
在此感谢原文作者。所以说为什么写博客,一方面提高自己,一方面可能会在意想不到的地方给他人启发。
最终解决方案:
其实说起来太简单,就是下了一款软件:ArtCursor(直接上地址:http://5.yd.pc0359.cn/soft/a/ArtCursors.rar),软件中,有一项设置sethotspot。修改就好了。。。另外,悄悄告诉你,其实Vs中,点击选中.cur文件中在属性栏直接就可以看得到hotspot,但不知为啥设置不了,晕!我之前都在干啥(吐血)
当然,我们还可以用更极客的方式,直接去编辑二进制文件:
我选择用SublimeText以十六进制形式打开.cur文件,修改第6、7字(第11、13字节),分别表示hotspot的x、y(注意,这里用的是十六进制)。保存,OK!
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Qt无边框窗口的移动、拉伸边框、鼠标滚轮缩放大小 2019-12-25
- 基于QCustomPlot绘图,鼠标跟随动态显示曲线上的点的值 2018-12-11
- WPF(C#)与MATLAB混合编程 2018-06-27
- 泛型集合小项目员工打卡 2018-06-18
- jQuery制作鼠标经过显示图片大图,生成图片tips效果 2018-06-18
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash