如何删除 Windows 10 上的白色触摸点 [英] How to remove white touch dot on Windows 10

查看:31
本文介绍了如何删除 Windows 10 上的白色触摸点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为 Windows 10 PC 创建一个类似于 kiosk 的应用程序,触摸屏作为其唯一的输入界面.我要删除的是显示为视觉触摸反馈的白色触摸点(主要是一个圆圈,可以关闭).

I am creating a kiosk–like application for a Windows 10 PC with a touch screen as its only input interface. What I want to remove is the white touch dot that is displayed as a visual touch feedback (mostly together with a circle, which can be turned off).

有人知道怎么做吗?

我已经在注册表中搜索过是否有使用过的游标 (*.cur) 文件但没有找到任何结果.因此,我猜触摸反馈的显示方式有所不同.

I have already searched the registry if there was a cursor (*.cur) file which is used but did not find any results. Due to that I guess that the touch feedback is displayed differently.

只是为了确保 - 我不想失去触摸功能,只需要去掉视觉反馈.

Just to make sure — I do not want to lose touch functionality, only the visual feedback needs to be gone.

推荐答案

对于 WPF 程序:

为了从 WPF 元素中移除触摸反馈,将 Stylus.IsTapFeedbackEnabled 依赖属性设置为 false 就足够了.您可能希望在样式中执行此操作:

For WPF programs:

In order to remove the touch feedback from WPF elements, it's enough to set Stylus.IsTapFeedbackEnabled dependency property to false. You may want to do that within styles:

<Style x:Key="yourStyle">
    <Setter Property="Stylus.IsTapFeedbackEnabled" Value="False" />
</Style>

您引用的白色触摸点实际上是一个光标.每当您触摸屏幕时,Windows 都会用触摸光标替换为控件设置的光标.为了避免这种非常丑陋的行为,您可以将光标设置为 Cursors.None,以便隐藏光标.将下面的代码粘贴到您的 Window 中,您将不会再看到 白色触摸点.

The white touch dot you cited is actually a cursor. Whenever you touch the screen, Windows replaces the cursor set for the control with the touch cursor. To avoid this honestly ugly behavior, you can set your cursor to Cursors.None, so that the cursor will be hidden. Paste the code below inside your Window and you won't see your white touch dot anymore.

protected override void OnPreviewTouchDown(TouchEventArgs e)
{
    base.OnPreviewTouchDown(e);
    Cursor = Cursors.None;
}

protected override void OnPreviewTouchMove(TouchEventArgs e)
{
    base.OnPreviewTouchMove(e);
    Cursor = Cursors.None;
}

protected override void OnGotMouseCapture(MouseEventArgs e)
{
    base.OnGotMouseCapture(e);
    Cursor = Cursors.Arrow;
}

protected override void OnPreviewMouseMove(MouseEventArgs e)
{
    base.OnPreviewMouseMove(e);

    if (e.StylusDevice == null)
        Cursor = Cursors.Arrow;
}

但是,当您使用鼠标时,您的光标将始终设置为 Cursors.Arrow,因此您可能会丢失已设置到窗口的不同光标.调整此行为是一项简单的任务 - 我的代码仅用于演示目的.

Your cursor will always be set to Cursors.Arrow when you're using the mouse, though, so you could lose a different cursor you had set to the window. It'd be an easy task to tweak this behavior — my code only serves for demonstration purposes.

查看 Stylus.IsTapFeedbackEnabled,我已经弄清楚了发生在幕后的 P/Invoke 调用.以下是我为 Windows 窗体应用程序提出的建议:

Looking at the Reference Source for Stylus.IsTapFeedbackEnabled, I've figured out the P/Invoke calls that happen under the hood. Here's what I've come up with for Windows Form applications:

using System;
using System.ComponentModel;
using System.Windows.Forms;

namespace TouchableWinform
{

    public class TouchableForm : Form
    {

        private const string TOUCH_SUPPORT_CATEGORY = "Touch support";
        private const bool IS_PRESS_AND_HOLD_ENABLED_DEFAULT_VALUE = false;
        private const bool IS_FLICKS_ENABLED_DEFAULT_VALUE = false;
        private const bool IS_TAP_FEEDBACK_DEFAULT_VALUE = false;
        private const bool IS_TOUCH_FEEDBACK_DEFAULT_VALUE = false;

        /// <summary>
        /// Gets or sets a values indicating whether press and hold is enabled.
        /// </summary>
        [Category(TOUCH_SUPPORT_CATEGORY), Description("Gets or sets a values indicating whether press and hold is enabled."), EditorBrowsable(EditorBrowsableState.Always), DefaultValue(IS_PRESS_AND_HOLD_ENABLED_DEFAULT_VALUE)]
        public bool IsPressAndHoldEnabled
        {
            get;
            set;
        } = IS_PRESS_AND_HOLD_ENABLED_DEFAULT_VALUE;

        /// <summary>
        /// Gets or sets a value indicating whether flicks are enabled.
        /// </summary>
        [Category(TOUCH_SUPPORT_CATEGORY), Description("Gets or sets a value indicating whether flicks are enabled."), EditorBrowsable(EditorBrowsableState.Always), DefaultValue(IS_FLICKS_ENABLED_DEFAULT_VALUE)]
        public bool IsFlicksEnabled
        {
            get;
            set;
        } = IS_FLICKS_ENABLED_DEFAULT_VALUE;

        /// <summary>
        /// Gets or sets whether a value indicating whether tap feedback is enabled.
        /// </summary>
        [Category(TOUCH_SUPPORT_CATEGORY), Description("Gets or sets whether a value indicating whether tap feedback is enabled."), EditorBrowsable(EditorBrowsableState.Always), DefaultValue(IS_TAP_FEEDBACK_DEFAULT_VALUE)]
        public bool IsTapFeedbackEnabled
        {
            get;
            set;
        } = IS_TAP_FEEDBACK_DEFAULT_VALUE;

        /// <summary>
        /// Gets or sets whether a value indicating whether touch feedback is enabled.
        /// </summary>
        [Category(TOUCH_SUPPORT_CATEGORY), Description("Gets or sets whether a value indicating whether touch feedback is enabled."), EditorBrowsable(EditorBrowsableState.Always), DefaultValue(IS_TOUCH_FEEDBACK_DEFAULT_VALUE)]
        public bool IsTouchFeedbackEnabled
        {
            get;
            set;
        } = IS_TOUCH_FEEDBACK_DEFAULT_VALUE;

        /// <summary>
        /// Processes Windows messages.
        /// </summary>
        /// <param name="m">The Windows <see cref="Message"/> to process.</param>
        protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
                case 0x2CB:
                    m.Result = new IntPtr(1);
                    break;
                case 0x2CC:
                    uint flags = 0;
                    if (!IsPressAndHoldEnabled)
                        flags |= 1;
                    if (!IsTapFeedbackEnabled)
                        flags |= 8;
                    flags |= IsTouchFeedbackEnabled ? (uint)0x100 : 0x200;
                    if (!IsFlicksEnabled)
                        flags |= 0x10000;
                    m.Result = new IntPtr(flags);
                    break;
                default:
                    base.WndProc(ref m);
                    break;
            }
        }
    }
}

不幸的是,由于某种原因,我仍然无法弄清楚,它看起来不太好用.我愿意接受任何建议.

Unfortunately, for some reason I couldn't still figure out, it doesn't quite look to be working. I'm open to any suggestions.

这篇关于如何删除 Windows 10 上的白色触摸点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆