Wpf中鼠标样式的修改,作用点修改

最近,在做一个控件的鼠标样式,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,但不知为啥设置不了,晕!我之前都在干啥(吐血)

时间: 2024-10-11 17:27:06

Wpf中鼠标样式的修改,作用点修改的相关文章

关于WPF中关于样式和模板的区别

百度了下,改天整理. WPF中关于样式和模板的区别: 回答一: 1.WPF样式类似于Web应用程序中的CSS,在WPF中可以为控件定义统一的样式(Style).样式属于资源的一种,例如为Button定义统一的背景颜色和字体: <Window.Resources> <Style  TargetType="Button"> <Setter Property="Background" Value="Yellow" />

wxpython中鼠标样式的获取与匹配

在wxpython中定义有多种默认的鼠标样式,譬如:wx.CURSOR_CROSS wx.CURSOR_HAND等等,这类不细说,可以参考wxpython的samples里面自带的cursor例子 这里讲介绍当前App的鼠标样式如何获取与匹配: 首先,获取非常简单,GetCursor()即可: 接着,匹配貌似易如反掌嘛, if self.GetCursor() == wx.StockCursor(wx.CURSOR_CROSS): pass 想当然耳就要栽跟头,上面的逻辑判断永远是False,因

WPF编程学习——样式

本文目录 1.引言 2.怎样使用样式? 3.内联样式 4.已命名样式 5.元素类型样式 6.编程控制样式 7.触发器 1.引言 样式(Style),主要是用来让元素或内容呈现一定外观的属性.WPF中的样式的作用,就像Web中的CSS一样,为界面上的元素定制外观,以提供更好的用户界面.在WPF应用程序中,通过控件的属性,我们也可以实现更改控件的外观.但是,这种方式局限性大.不灵活且不利于维护.例如: <Grid> <Button Width="80" Height=&q

WPF 中style文件的引用

原文:WPF 中style文件的引用 总结一下WPF中Style样式的引用方法: 一,内联样式: 直接设置控件的Height.Width.Foreground.HorizontalAlignment.VerticalAlignment等属性.以设置一个Botton控件的样式为例,如: 复制代码 <Grid x:Name="ContentPanel" > <Button Content="Button" Name="btnDemo"

vue组件中的样式属性:scoped,解决在父组件中无法修改子组件样式问题

Scoped CSS规范是Web组件产生不污染其他组件,也不被其他组件污染的CSS规范. vue组件中的style标签标有scoped属性时表明style里的css样式只适用于当前组件元素,它是通过使用PostCSS来改变以下内容实现的: <style scoped> .example { color: red; } </style> <template> <div class="example">hi</div> </

WPF中使用TranslateTransform3D修改CAD的3D旋转中心

原文:WPF中使用TranslateTransform3D修改CAD的3D旋转中心 ?????? 前面一篇文章讲述了2D旋转功能的实现,文章提到了修改3D旋转中心,这一节主要总结一下具体的修改3D旋转中心的实现方法.(这个功能的实现有一段时间了,需要通过代码好好总结一下) ????? TranslateTransform3D以相对容器的偏移移动对象,通过OffsetX.OffsetY.OffsetZ属性来指定偏移量. ? (1)定义对象 ??????? private TranslateTran

WPF中样式和行为和触发器

原文:WPF中样式和行为和触发器 样式简介:样式(style)是组织和重用格式化选项的重要工具,不是使用重复的标记填充XAML,以便设置外边距.内边距.颜色以及字体等细节.而是创建一系列封装所有这些细节的样式,然后在需要之处通过属性来设置样式.名称空间是System.Windows. 1.样式. 为了理解适合使用样式的集合,分析一个简单的示例,设想需要标准化在窗口中使用的字体,最简单的方式是设置包含窗口的字体属性,这些属性都是在Control类中定义的,包括FontFamily.FontSize

WPS长文档编辑技巧之二:对样式的设置与修改

目录:       1.使用系统内置样式 2.如何修改样式 3.如何自定义样式 4.在文档使用多级编号 5.结合样式编辑文档大纲 6.利用文档结构图查看大纲结构 正文: 1.使用系统内置样式 在使用样式中尽可能使用WPS内置的样式,这样可以减少我们的工作量. 内置样式是指WPS文字中本身自带的样式,包括:正文.标题1.标题2.标题3.默认段落字体等样式,当打开一个新的WPS文档时,通常在"样式和格式"任务窗格中可看到这四个,如图6所示. 当然,内置样式不仅仅就这几个,单击"样

CAD图纸中的文字颜色要怎么修改

现在随着科技的不断发展,人们对于住房的要求也就越来越高,那CAD行业也随着不断的壮大发展,在CAD中日常的工作就是CAD绘图,在绘制的时候再有的特别的地方需要给图纸做一下说明标注,但是为了让图纸的内容和标注的文字区分开来,我们就需要将文字的颜色更改一下,那在CAD图纸中的文字颜色要怎么修改?下面小编就来教教大家具体的操作方法. 第一步:首先,将电脑进行打开,如果电脑中没有安装CAD编辑器.那就在电脑桌面上任意打开一个浏览器,在搜索框中搜索迅捷CAD编辑器,接着点击进入官网,点击下载安装最新版本的