【WPF】获取电磁笔的压感
WPF 不仅支持触控,也支持笔的输入,比如现在比较高大上的电磁笔。便宜的板子一般不配备电磁笔,而是配电容笔,虽然也号称XXX级压感,但是效果自然不可与电磁笔相比。
UIElement 类规范了UI元素的基本轮廓,在该类公开的事件中,大凡以 Stylus 开头的事件,都与书写笔有关。这里大伙伴要注意一点,当笔尖按下屏幕时会发生 StylusDown 事件,但是,此时我们还不能够得到笔的压力值。
紧随其后就会发生 StylusMove 事件。笔按下后就会马上引上这个事件,而且,只要笔在屏幕上移动就会不断引发这个事件,前提是你在移动笔尖时不能离开屏幕。如果笔尖提起,会发生 StylusUp 事件;笔尖提起后,处于悬空状态,只要笔还在感应范围内,移动笔尖会发生 StylusInAirMove 事件。注意区别,笔尖按下时移动发生的是 StylusMove 事件,而悬空后移动会发生 StylusInAirMove 事件。
笔输入的数据由 StylusPoint 结构来封装,其中,X和Y相信你也猜到,就是笔尖的坐标,这点与鼠标事件相似。不过,笔输入的数据还带有一个 PressureFactor 字段,对,重点就是它了,它表示笔的压力。
不管你的笔是 256 级压感,还是 1024 级 2048 级压感,PressureFactor 字段值始终在 0 和 1 之间,它是个浮点数值,数字越小,表示压力越小;反之表示压力越大。
好了,经过老周上面一堆废话,估计你也已经知道这活怎么干了。下面,还是老规矩,学习不干活是不行的,所以,我们得动手,才能弄懂。
首先,在窗口上放一个矩形。
<Grid Background="Transparent">
<Rectangle Fill="Red" Name="rect" />
</Grid>
把这个矩形的填充颜色设为红色,待会儿咱们感应电磁笔的压力,动态调整矩形的透明度。压力越大,矩形越红,比那些网红还要红。
接着,处理相关事件。
<Rectangle Fill="Red" Name="rect"
StylusMove="OnStyluesMove"/>
然后编写处理代码。
private void OnStyluesMove(object sender, StylusEventArgs e)
{
var pts = e.GetStylusPoints(null);
foreach (var p in pts)
{
rect.Opacity = p.PressureFactor;
}
}
因为笔尖在屏幕上移动时,可能一次会产生N个坐标,所以,GetStylusPoints方法返回一个点的集合,这个方法在调用时,需要传递一个元素引用,用来作为参照对象,即,所获取的坐标是相对于这个对象。此处用 null 表示获取到的点是相对于根,如窗口。
由于笔尖的一次移动可能产生多个点,这里我顺便 foreach 了一下,其实,眼睛看到的最后一轮设置的值。因而你完全可以去掉这个 foreach ,在点集合中,只取出一个点出来就行了(最后一个点)。我姑且保留 foreach ,大伙儿可以下载源码后,自行玩耍。
巧合的是,Opacity 属性的值范围是 0 到 1,PressureFactor 的值范围也是 0 到 1,所以,直接赋值就完事了,不用转化计算。
最后运行程序,然后拿电磁笔狠狠地扎几下窗口,你就能看到压感的变化了。效果请参考下面的高清无码无水印动图。

好,今天就聊到这里,see you。
【WPF】获取电磁笔的压感的更多相关文章
- CDR 2017压感笔和压感设备该怎么设置使用?
您可以通过CorelDRAW 2017 中的以下工具来运用压感笔.笔或其他设备的压力:艺术笔(表达模式).橡皮擦.涂抹.转动.吸引.排斥.粗糙和弄脏.此外,您还可以通过艺术笔(表达模式)工具.橡皮擦. ...
- WPF 获取程序路径的一些方法,根据程序路径获取程序集信息
一.WPF 获取程序路径的一些方法方式一 应用程序域 //获取基目录即当前工作目录 string str_1 = System.AppDomain.CurrentDomain.BaseDirector ...
- WPFの获取任意元素的位置
如果布局在Grid中: 方法一: //_stackPanel为子元素,_grid为父元素 Point point = _stackPanel.TranslatePoint(new Point(0, 0 ...
- c# WPF 获取网络图片,验证码
c# WPF 获取网络图片,验证码 public static BitmapImage getValidCodeBitmap() { string url = "http://my.baaa ...
- WPF 获取应用的所有窗口
原文:WPF 获取应用的所有窗口 本文告诉大家如何获取应用内的所有窗口,无论这些窗口有没显示 在 WPF 可以通过 Application.Current.Windows 列举应用的所有窗口 fore ...
- WPF 获取 ListView DataTemplate 中控件值
原文:WPF 获取 ListView DataTemplate 中控件值 版权声明:本文为博主原创文章,未经博主允许可以随意转载 https://blog.csdn.net/songqingwei19 ...
- WPF 获取鼠标屏幕位置、窗口位置、控件位置
原文:WPF 获取鼠标屏幕位置.窗口位置.控件位置 public struct POINT { public int X; public int Y; public POINT(int x, int ...
- WPF获取外部EXE图标最简单的方法
原文:WPF获取外部EXE图标最简单的方法 首先在工程添加对System.Drawing的引用 创建以下方法: public static ImageSource GetIcon(string fil ...
- [WPF]获取鼠标指针下的元素
原文:[WPF]获取鼠标指针下的元素 [WPF]获取鼠标指针下的元素 周银辉 以前写过一些GetElementUnderMouse之类的函数,要用到坐标换算而显得有些麻烦(特别是当元素有XXXTr ...
随机推荐
- iOS开发之UICollectionViewController
1.概述 UICollectionView控件主要是用来做九宫格的,类似于android中的GridView控件.其用法与UITableView一样,首先要使控制器遵守数据源协议,再将控制器设置为UI ...
- 解决虚拟机vmware安装64位系统“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”的问题
虚拟机使用的是VMware Workstation,并且首次在虚拟机体验64 位系统.在新建好虚拟机,运行时候就出现了VMware Workstation 的提醒:此主机支持 Intel VT-x,但 ...
- xml学习_上篇
xml简介: XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据. xml小示例: /************************ ...
- POPTEST老李分享修改dns ip的vbs代码
POPTEST老李分享修改dns ip的vbs代码 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨 ...
- Android Studio查找功能(搜索功能)及快捷键
版权声明:本文为博主原创文章,未经博主允许不得转载. 1.在当前窗口查找文本[Ctrl+F] F3 向下查找关键字出现位置 Shift+F3 向上一个关 ...
- 1.Maven的安装及配置
1 Maven 介绍 Maven这个词可以翻译为“知识的积累”,也可以翻译为“专家”或“内行”.本书将介绍Maven这一跨平台的项目管理工具.作为Apache组织中的一个颇为成功的开源项目,Maven ...
- Entity Framework快速入门--IQueryable与IEnumberable的区别
IEnumerable接口 公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代.也就是说:实现了此接口的object,就可以直接使用foreach遍历此object: IQueryable 接口 ...
- JS高级学习路线——面向对象进阶
构造函数进阶 使用构造函数创建对象 用于创建对象 其除了是一个函数之外,我们又称之为构造对象的函数 - 简称构造函数 function Product(name,description){ //属性 ...
- 源码阅读之mongoengine(0)
最近工作上用到了mongodb,之前只是草草了解了一下.对于NoSQL的了解也不是太多.所以想趁机多学习一下. 工作的项目直接用了pymongo来操作直接操作mongodb.对于用惯了Djongo O ...
- Android可以换行的布局
本文讨论的是下图的这种数据展示方式 通过本文可以学到的内容 ===View绘制的工作流程measure和Layout,即测量和布局: ===动态创建和添加子View,以及设置点击事件的一种思路 1.主 ...