1
我为我的表单调用了RegisterTouchWindow,现在我得到了原始的WM_TOUCH消息,但这些消息也生成WM_MOUSEDOWN,WM_MOUSEMOVE和WM_MOUSEUP。有没有办法禁用这种行为?我只想获取WM_TOUCH消息。触摸API:禁用遗留Windows消息
我知道有这个workaround,但我有兴趣,如果有任何其他解决方案。
我为我的表单调用了RegisterTouchWindow,现在我得到了原始的WM_TOUCH消息,但这些消息也生成WM_MOUSEDOWN,WM_MOUSEMOVE和WM_MOUSEUP。有没有办法禁用这种行为?我只想获取WM_TOUCH消息。触摸API:禁用遗留Windows消息
我知道有这个workaround,但我有兴趣,如果有任何其他解决方案。
你的控制可以覆盖的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());
是,我知道这个解决方案。您还可以检查鼠标消息是否是通过触摸生成的,并将其丢弃,因此您一般不会禁用它们。它几乎适用于每一个鼠标消息,但不适用于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