2016-05-16 43 views
0

我有安装了触摸屏和Windows 8的笔记本电脑。在Windows 8上配置触摸

我的窗体上没有任何东西,我只想处理WM_LBUTTON_DOWN和WM_LBUTTON_UP消息。

这里是我所得到的:

  1. 我按下触摸屏上我的形式,看看有没有 WM_LBUTON_DOWN消息。
  2. 我释放我的表单并看到 WM_LBUTTON_DOWN和WM_LBUTTON_UP消息出现。

问题是当我按下表格时,我没有收到WM_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); 
     } 
    } 
} 

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

回答

1

该行为是由设计,它不能改变。原因很简单,即通过触摸输入系统无法决定首次接触,这是否等于鼠标左键按下,或者只是长按的开始,即转换为右键按下消息。

如果您希望实施响应式触控优化用户界面,您必须致电RegisterTouchWindow(可选地传递TWF_WANTPALM标志),并处理WM_TOUCH消息而不是兼容性鼠标消息。

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