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 });
            }                
        }
               
    }
}

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

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

Disable the RealTimeStylus for WPF Applications


本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Create Sun

mvc file控件无刷新异步上传操作

前言   上传文件应该是很常见必不可少的一个操作,网上也有很多提供的上传控件。今天遇到一个问题:input控件file无法进行异步无刷新上传。真真的感到别扭。所...

36870
来自专栏张善友的专栏

开源消息队列:NetMQ

NetMQ 是  ZeroMQ的C#移植版本。 ZeroMQ是一个轻量级的消息内核,它是对标准socket接口的扩展。它提供了一种异步消息队列,多消息模式,消息...

46450
来自专栏哲学驱动设计

091019 T AddIn

Add-In,也叫Plug-In,可以在程序编译完成后,嵌入到程序当中的一些模块。 在.net环境下实现这个功能,命名空间为:System.AddIn。 主要是...

20350
来自专栏张善友的专栏

使用Topshelf创建Windows 服务

Winndows Service 是一种可随 Windows 操作系统启动而启动的,在后台运行的,通常不和用户产生交互的程序。它无法通过双击来运行,类似于 Un...

21860
来自专栏施炯的IoT开发专栏

在Windows Mobile的控制台应用中使用Notification

    今天在论坛上看到有朋友问如何在Windows Mobile的控制台应用中使用Microsoft.WindowsCE.Forms.Notification...

33750
来自专栏跟着阿笨一起玩NET

.Net下收发邮件第三方公共库

http://www.lumisoft.ee/lswww/download/downloads/Net/

23910
来自专栏谭广健的专栏

简单易用的NanUI

一直在寻找简单易用快捷的H5游览器嵌入到WINFROM中,终于在无意之间发现了NanUI.测试了一下还可以;

1.4K160
来自专栏偏前端工程师的驿站

网页优化系列二:使用Cache缓存静态文件、图片(asp.net版)

  网站中存在一些不会经常变更的内容如静态文件、图片等,我们称之为静态资源。针对这些静态资源使用cache缓存到客户端中,以减少用户再次浏览该网页时的请求量,从...

26670
来自专栏ASP.NETCore

在ASP.NET Core使用Middleware模拟Custom Error Page功能

在传统的ASP.NET MVC中,我们可以使用HandleErrorAttribute特性来具体指定如何处理Action抛出的异常.只要某个Action设置了...

12230
来自专栏依乐祝

Asp.Net Core Web Api图片上传(一)

阅读本文章,需要你具备asp.net core的基础知识,至少能够创建一个Asp.Net Core Web Api项目吧!其次,我不会跟你说MongoDB是什么...

1.3K10

扫码关注云+社区

领取腾讯云代金券