C# 在Windows 8上配置触摸屏

C# 在Windows 8上配置触摸屏,c#,windows,winforms,C#,Windows,Winforms,我的笔记本电脑安装了触摸屏和Windows 8 我的windows窗体上没有任何内容,我只想处理WM_LBUTTON_DOWN和WM_LBUTTON_UP消息 以下是我得到的: 我在触摸屏上按我的表格,看到没有 WM_LBUTON_关闭消息 我释放了我的表格,看到了 WM_LBUTTON_DOWN和WM_LBUTTON_UP消息出现 问题是当我按下表单时,我没有收到WM\u LBUTTONDOWN消息。WM_LBUTTONDOWN消息仅在我释放表单时出现 using System; using

我的笔记本电脑安装了触摸屏和Windows 8

我的windows窗体上没有任何内容,我只想处理WM_LBUTTON_DOWN和WM_LBUTTON_UP消息

以下是我得到的:

  • 我在触摸屏上按我的表格,看到没有 WM_LBUTON_关闭消息
  • 我释放了我的表格,看到了 WM_LBUTTON_DOWN和WM_LBUTTON_UP消息出现
  • 问题是当我按下表单时,我没有收到WM\u LBUTTONDOWN消息。WM_LBUTTONDOWN消息仅在我释放表单时出现

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
    
    namespace TouchExample
    {
        public partial class MainForm : Form
        {
            [DllImport("User32.dll")]
            public static extern bool RegisterTouchWindow(IntPtr hWnd, int flags);
    
            [DllImport("User32.dll")]
            public static extern bool UnregisterTouchWindow(IntPtr hWnd);
    
            public MainForm()
            {
                InitializeComponent();
            }
    
            protected override void OnHandleCreated(EventArgs e)
            {
                base.OnHandleCreated(e);
    
                RegisterTouchWindow(Handle, 0);
            }
    
            protected override void OnFormClosing(FormClosingEventArgs e)
            {
                UnregisterTouchWindow(Handle);
    
                base.OnFormClosing(e);
            }
    
            protected override void WndProc(ref Message m)
            {
                // l button down
                if (m.Msg == 0x201)
                {
                    // do something
                }
                // r button down
                else if (m.Msg == 0x202)
                {
                    // do something
                }
    
                base.WndProc(ref m);
            }
        }
    }
    

    我做错了什么?我怎样才能改变这种行为?

    这种行为是经过设计的,不能改变。原因很简单,通过触摸输入,系统无法决定第一次接触,这是等同于鼠标左键按下,还是只是长按的开始,转换为右键按下消息

    如果您希望实现响应式触摸优化UI,则必须调用(可选地传递
    TWF_WANTPALM
    标志),并处理消息,而不是兼容性鼠标消息

    如果您正在处理
    WM_TOUCH
    消息,您可以过滤掉为与未实现专用触摸输入的应用程序兼容而生成的鼠标消息。如何识别这些“假”鼠标消息在中进行了说明