从FrameworkElement对象创建Cursor对象
原文:从FrameworkElement对象创建Cursor对象
Normal
0
false
false
false
EN-US
ZH-CN
X-NONE
MicrosoftInternetExplorer4
理论上可以从任何派生自 Visual的对象创建光标对象,但是由于 FrameworkElement拥有 ActualWidth和 ActualHeight属性,这就省去了指定光标大小的麻烦。创建过程很简单,可运行代码如下:
public static class CursorHelper
{
// 表示每英寸的像素点数
private const int DPI = 96;
public static Cursor CreateCursorFromFrameworkElement(FrameworkElement e, Point hotSpot)
{
// 把界面元素呈现到位图上
RenderTargetBitmap renderTargetBitmap =
new RenderTargetBitmap ((int )e.ActualWidth, (int )e.ActualHeight, DPI, DPI, PixelFormats .Pbgra32);
renderTargetBitmap.Render(e);
PngBitmapEncoder bitmapEncoder = new PngBitmapEncoder ();
BitmapFrame bitmapFrame = BitmapFrame .Create(renderTargetBitmap);
bitmapEncoder.Frames.Add(bitmapFrame);
using (var stream = new System.IO.MemoryStream ())
{
// 把位图保存到一个 Stream 中
bitmapEncoder.Save(stream);
stream.Seek(0, System.IO.SeekOrigin .Begin);
System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap (stream);
// 光标文件 .cur 文件其实是基于图标文件的( .ico ) , 所以先将位图转换为图标
IntPtr iconHandle = bitmap.GetHicon();
System.Drawing.Icon icon = System.Drawing.Icon .FromHandle(iconHandle);
using (System.IO.Stream iconStream = new System.IO.MemoryStream ())
{
icon.Save(iconStream);
// 第二个字节表示该图形是图标还是光标, 2 表示光标
iconStream.Seek(2, System.IO.SeekOrigin .Begin);
iconStream.WriteByte(2);
// 第十个字节处存放热点坐标的 x 坐标,热点就是用来点击屏幕的点,该点的坐标就是其在位图中的坐标,此处参数用的是相对坐标。此处转换为绝对坐标
iconStream.Seek(10, System.IO.SeekOrigin .Begin);
iconStream.WriteByte((byte )(int )(e.ActualWidth * hotSpot.X));
Normal
0
false
false
false
EN-US
ZH-CN
X-NONE
MicrosoftInternetExplorer4
<![endif]-->
// 第十二个字节处存放热点坐标的 y 坐标
iconStream.Seek(12, System.IO.SeekOrigin .Begin);
iconStream.WriteByte((byte )(int )(e.ActualHeight * hotSpot.Y));
iconStream.Seek(0, System.IO.SeekOrigin .Begin);
return new Cursor (iconStream);
}
}
}
从FrameworkElement对象创建Cursor对象的更多相关文章
- Cocos2d-js中使用纹理对象创建Sprite对象
本节我们会通过一个实例介绍纹理对象创建Sprite对象使用,这个实例如图5-2所示,其中地面上的草是放在背景(如下图所示)中的,场景中的两棵树是从后图所示的“树”纹理图片中截取出来的,图5-5所示是树 ...
- 实例:使用纹理对象创建Sprite对象
精灵类是Sprite,它的类图如下图所示: Sprite类直接继承了Node类,具有Node基本特征.此外,我们还可以看到Sprite类的派生类有:PhysicsSprite和Skin.Physics ...
- Object-C 对象 (创建/销毁 对象)-- 笔记
创建/销毁 对象: Dog *dog = [Dog alloc]; // 通过alloc创建dog一个这样的对象, alloc相对于C语言中的new // *号既表示指针,也表示引用 初始化构造函数 ...
- HotSpot虚拟机对象探秘(对象创建,对象内存布局,对象访问定位)
以常用的HotSpot虚拟机和JAVA内存区域堆为例,探讨对象的创建,对象的内存布局以及对象的访问定位 一.对象的创建 1)类加载:虚拟机遇到一条new指令时,先检测这个指令的参数能否在常量池中定位到 ...
- Java虚拟机4:Java对象创建和对象访问
1.对象创建 Java是一门面向对象的语言,Java程序运行过程中无时无刻都有对象被创建出来.在语言层面上,创建对象(克隆.反序列化)就是一个new关键字而已,但是虚拟机层面上却不是如此.看一下在虚拟 ...
- 在TerraExplorer中如何批量根据shape多边形对象创建TerrainModify对象?
其实,在Skyline中TerrainModify对象就是一个特殊类型Polygon对象,他们的Geometry是可以直接交换使用的: <!DOCTYPE html PUBLIC "- ...
- JVM之对象创建、对象内存布局、对象访问定位
对象创建 类加载过后可以直接确定一个对象的大小 对象栈上分配是通过逃逸分析判定.标量替换实现的,即把不存在逃逸的对象拆散,将成员变量恢复到基本类型,直接在栈上创建若干个成员变量 选择哪种分配方式由Ja ...
- Spring学习笔记之 Spring IOC容器(一)之 实例化容器,创建JavaBean对象,控制Bean实例化,setter方式注入,依赖属性的注入,自动装配功能实现自动属性注入
本节主要内容: 1.实例化Spring容器示例 2.利用Spring容器创建JavaBean对象 3.如何控制Bean实例化 4.利用Spring实现bean属性sett ...
- JavaScript 基础(二) - 创建 function 对象的方法, String对象, Array对象
创建 function 对象的两种方法: 方式一(推荐) function func1(){ alert(123); return 8 } var ret = func1() alert(ret) 方 ...
随机推荐
- 【SPOJ 694】Distinct Substrings
[链接]h在这里写链接 [题意] 给你一个长度最多为1000的字符串 让你求出一个数x,这个x=这个字符串的不同子串个数; [题解] 后缀数组题. 把原串复制一份,加在 ...
- Netty原理和使用
性能主题 Netty原理和使用 Netty是一个高性能 事件驱动的异步的非堵塞的IO(NIO)框架,用于建立TCP等底层的连接,基于Netty可以建立高性能的Http服务器.支持HTTP. WebSo ...
- js进阶 12-8 如何知道上一个函数的返回值是什么(如何判断上一个函数是否执行成功)
js进阶 12-8 如何知道上一个函数的返回值是什么(如何判断上一个函数是否执行成功) 一.总结 一句话总结:event的result属性即可. 1.event的result属性的实际应用场景是什么? ...
- 16、NOR FLASH驱动框架
mtdram.c是内核自带用内存模拟nor flash程序 physmap.c是内核自带nor flash驱动程序最底层硬件相关层代码 其关键代码是:1.分配一个map_info结构体 2.设置 ...
- GB2312/ANSI编码转中文字符
struct GB2312{ unsigned short gb2312code; CString ChineseCode;}GB2312ToChinese[] = {{0xA1A ...
- 【例题3-2 UVA - 10082】WERTYU
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用一个字符数组,用数组的下标相邻来代表相邻的关系. [错的次数] 在这里输入错的次数 [反思] int i; for (i = 0; ...
- 一个神奇的控件——Android CoordinatorLayout与Behavior使用指南
CoordinatorLayout是support.design包中的控件,它可以说是Design库中最重要的控件. 本文通过模仿知乎介绍了自定义Behavior,通过模仿百度地图介绍了BottomS ...
- 2016.3.14__CSS 定位__第六天
假设您认为这篇文章还不错.能够去H5专题介绍中查看很多其它相关文章. CSS 定位机制 CSS中一共同拥有三种基本定位机制:普通流.浮动.绝对定位. 假设不进行专门指定.全部的标签都在普通流中定位. ...
- D3.js以及通用JS(JavaScript)读取并解析server端JSON的注意事项
这个需求事实上挺明白的.可是网上搜出来的教程都乱七八糟,认为实在须要自己总结一下. D3.js眼下已经被广泛使用在数据可视化领域,随着大数据的持续发展,这个框架预计会在今后更加流行(据说其作者Mike ...
- 前端切图:CSS实现隐藏滚动条同时又可以滚动
CSS 实现隐藏滚动条同时又可以滚动 原始功能: 图片发自简书App 添加伪类之后的功能: 图片发自简书App 完整demo如下: <!DOCTYPE html> <html> ...