我们提供安全,免费的手游软件下载!
本文将主要介绍WPF应用对鼠标输入、触摸屏触笔以及触摸事件的封装。
之前的一篇博客已经简要说明了设备输入类型: WPF 屏幕点击的设备类型 - 唐宋元明清2188 - 博客园
1、鼠标 - 通过Mouse相关的事件参数MouseButtonEventArgs中的数据,e.StylusDecice==null表示没有触摸设备,所以设备为鼠标。
2、触笔 or 触摸 - 根据StylusDown事件参数StylusDownEventArgs,e.StylusDevice.TabletDevice.Type == TabletDeviceType.Stylus,True表示触摸设备为触笔,False则为触摸。
通过上述设备类型的判断,可以封装一套设备点击事件,包括DeviceDown、DeviceUp、DeviceMove。事件参数中添加设备类型DeviceType(鼠标、触笔、触摸),然后在具体业务中可以通过设备类型区分相关的交互操作。
有读者问及设备类型具体如何封装,本文将补充设备输入事件的封装使用,希望能为大家提供一定帮助,节省开发时间。
除了设备输入类型,输入事件也有多种状态。 简单介绍下事件区分,具体以鼠标事件为例:
上面区分了按钮与其它的FrameworkElement的鼠标事件,因为Button对冒泡事件是做了拦截再暴露Click事件,需要订阅路由事件来完成鼠标的监听。
如上方代码,对鼠标的左右键、按下抬起、移动以及冒泡隧道都做了完整的封装。
鼠标事件:
触摸面积获取:
返回新的触笔输入点集:
这里是直接把StylusPoint.Description舍弃, 防止在应用层未能统一好这个设备描述、导致异常。
当然这些获取信息根据业务需要来获取、此处设备事件封装不损耗处理延时,所以需要添加Lazy函数如:
PositionLazy = new Lazy
PointsLazy = new Lazy
暴露的通用设备按下事件,可以看如下定义:
UI控件订阅DeviceDown、DeviceMove、DeviceUp事件,从事件参数DeviceInputArgs获取详细数据:
DeviceInputArgs继承Windows路由事件参数类RoutedEventArgs
为何要封装通用事件?因为2点原因:
1. 大部分业务并不需要区分鼠标、触笔、触摸类型
2. 有些业务如白板书写、多指操作需要区分鼠标、触笔、触摸类型,这类场景因为操作事件订阅太多,业务逻辑搞复杂了
通过将鼠标、触笔、触摸事件封装为通用输入事件,下游应用业务对设备输入事件处理逻辑就简单化了。
封装Demo可详见: kybs00/DeviceInputEventDemo (github.com)
关键字:鼠标、触笔、触摸
热门资讯