2011-03-03 88 views
1

我为我的表单调用了RegisterTouchWindow,现在我得到了原始的WM_TOUCH消息,但这些消息也生成WM_MOUSEDOWN,WM_MOUSEMOVE和WM_MOUSEUP。有没有办法禁用这种行为?我只想获取WM_TOUCH消息。触摸API:禁用遗留Windows消息

我知道有这个workaround,但我有兴趣,如果有任何其他解决方案。

回答

1

你的控制可以覆盖的WndProc这样的:

const int WM_LBUTTONDOWN = 0x201; 
    const int WM_LBUTTONUP = 0x202; 
    const int WM_MOUSEMOVE = 0x200; 

    protected override void WndProc(ref Message m) 
    { 
     if (m.Msg == WM_LBUTTONDOWN 
      || m.Msg == WM_LBUTTONUP 
      || m.Msg == WM_MOUSEMOVE) 
      return; 
     base.WndProc(ref m); 
    } 

如果您的应用程序完全想的忽略这些消息做类似shown here

public class MouseMessageFilter : IMessageFilter 
{ 
    const int WM_LBUTTONDOWN = 0x201; 
    const int WM_LBUTTONUP = 0x202; 
    const int WM_MOUSEMOVE = 0x200; 

    public bool PreFilterMessage(ref Message m) 
    { 
     if (m.Msg == WM_LBUTTONDOWN) return true; 
     if (m.Msg == WM_LBUTTONUP) return true; 
     if (m.Msg == WM_MOUSEMOVE) return true; 
     return false; 
    } 
} 

主:

Application.AddMessageFilter(new MouseMessageFilter()); 
+0

是,我知道这个解决方案。您还可以检查鼠标消息是否是通过触摸生成的,并将其丢弃,因此您一般不会禁用它们。它几乎适用于每一个鼠标消息,但不适用于WM_MOUSELEAVE,[我在MSDN论坛发布了这个。](http://social.msdn.microsoft.com/Forums/en-US/tabletandtouch/thread/c8625e10-2cce-4c43 -9a95-118616a5a82c)我感谢你的IMessageFilter建议:) – MBulli 2011-03-04 11:23:32