2019-11-29-WPF-禁用实时触摸

摘要:
为了获得真实的触摸信息,Microsoft提供了OnStylusDown、OnStylus Up和OnStyluMove事件。本文向您展示如何使用代码禁用WPF触摸消息并解决一些问题。这两个API彼此独立,依赖于相同的HWND。如果要使用WM_TOUCH,需要在WPF中禁用WPF触摸事件。如果未禁用,则无法获取WM _ TOUCH消息。此方法允许您定义自己的触摸。禁用的方法使用以下代码:publicstaticvoidDisableWPFTabletSupport(){//获取此窗口的桌面设备集合。TableDeviceCollectiondevices=System.Windows.Input.tabletdevices;if{//GetTypeofInputManager.TypeinputManagerType=typeof;//调用InputManager.Currentinstance.objectstylusLogic=inputManagerType.InvokeMember;if(StylusLogic!虽然禁用Microsoft提供的触摸事件可以修复许多漏洞,但禁用后还有许多新漏洞,但我不会在这里告诉你。
titleauthordateCreateTimecategories
WPF 禁用实时触摸
lindexi
2019-11-29 10:20:52 +0800
2018-5-4 21:0:38 +0800
WPF 触摸

微软想把 WPF 作为 win7 的触摸好用的框架,所以微软做了很多特殊的兼容。为了获得真实的触摸消息,微软提供了 OnStylusDown, OnStylusUp, 和 OnStylusMove 事件。 本文告诉大家如何使用代码禁用 WPF 的触摸消息,解决一些问题。

在 win7 还提供了多点触摸 windows 消息 WM_TOUCH ,通过这两个 API 一个是 OnStylusDown 这些事件,另一个就是 WM_TOUCH ,用户可以拿到触摸消息。

这两个 API 是相互独立,依靠相同的 HWND 。

那么为什么需要禁用 WPF 的 RealTimeStylus ,因为在 WPF 触摸平台会禁用 WM_TOUCH 消息。如果想要使用 WM_TOUCH ,在 WPF 需要禁用 WPF 的触摸事件。

如果没有禁用,就无法拿到 WM_TOUCH 消息,这个方法可以让自己定义自己的触摸。

禁用的方法使用下面代码

	public static void DisableWPFTabletSupport()
{
    // Get a collection of the tablet devices for this window.  
    TabletDeviceCollection devices = System.Windows.Input.Tablet.TabletDevices;

    if (devices.Count > 0)
    {   
        // Get the Type of InputManager.
        Type inputManagerType = typeof(System.Windows.Input.InputManager);
        
        // Call the StylusLogic method on the InputManager.Current instance.
        object stylusLogic = inputManagerType.InvokeMember("StylusLogic",
                    BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.NonPublic,
                    null, InputManager.Current, null);

        if (stylusLogic != null)
        {
            //  Get the type of the stylusLogic returned from the call to StylusLogic.
            Type stylusLogicType = stylusLogic.GetType();
            
            // Loop until there are no more devices to remove.
            while (devices.Count > 0)
            {
                // Remove the first tablet device in the devices collection.
                stylusLogicType.InvokeMember("OnTabletRemoved",
                        BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.NonPublic,
                        null, stylusLogic, new object[] { (uint)0 });
            }                
        }
               
    }
}

代码直接可以直接放在项目,代码是在微软文档复制。

虽然禁用微软提供的触摸事件,可以修复很多坑,但是禁用了也是有很多新的坑,不过我就不在这里告诉大家。自己尝试运行下面代码,然后试试程序。

为什么这样就可以禁用触摸,请看WPF 触摸到事件

Disable the RealTimeStylus for WPF Applications

免责声明:文章转载自《2019-11-29-WPF-禁用实时触摸》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇midway mysql egg-mysql 配置 基础操作 增删改查linux虚拟机磁盘扩展与分区大小调整下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

android即时消息处理机制

     在android端做即时消息的时候。遇到的坑点是怎么保证消息即时性,又不耗电。为什么这么说呢?     原因是假设要保证消息即时性。通常有两种机制pull或者push。pull定时轮询机制,比較浪费server资源;pushserver推送机制,须要保持长连接,client和server都要求比較高(网络环境,server保持连接数等),它们的...

【WPF】查找父/子控件(元素、节点)

整理一下项目中常用的找控件功能,包括找父/子控件、找到所有同类型子控件(比如ListBox找到所有Item)。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; us...

将excel表数据导入sqlserver2008R2 报错

错误信息: 正在复制到 [dbo].[Sheet1sss$] (错误)消息错误 0xc020901c: 数据流任务 1: 输出“Excel 源输出”(9) 上的 输出列“FDESC”(93) 出错。返回的列状态是:“文本被截断,或者一个或多个字符在目标代码页中没有匹配项。”。(SQL Server 导入和导出向导)错误 0xc020902a: 数据流任务...

深度分析WM_PAINT和WM_ERASEBKGND消息

       做windows开发这么久了,一直以来对WM_PAINT和WM_ERASEBKGND消息总是感觉理解的不准确,每次要自绘一个窗口都因为知其然不知其所以然,偶然发现一篇文章,详细透彻地分了这个两个消息的用途和设计初衷,这篇文章也是我见过最深入也是最准确关于WM_PAINT和WM_ERASEBKGND消息的,文中每一句话都值得咀嚼。先转载如下:...

FFMPEG 配置选项详细说明

转自:https://blog.csdn.net/z2066411585/article/details/81239446 用法:配置[选项] 选项:[描述后括号中的默认值] 帮助选项: --help 打印此消息 --quiet 抑制显示信息输出 --list-decoders 显示所有可用的解码器 --list-encoders 显示所有可用的编码器 -...

springCloud 后端使用webSocket向前端推送消息

1、webSocket webSocket长连接是一种在单个tcp连接上进行全双工通信的协议,允许双向数据推送。一般微服务提供的restful API只是对前端请求做出相应。使用webSocket可以实现后端主动向前端推送消息。 2、springboot使用webSocket 1、pom文件添加依赖 <dependency> <...