我正在尝试使用 WM_TOUCH 消息来捕获我的应用程序中的触摸事件。例如,我想注册一个“3 手指滑动”手势,因为 WM_GESTURE 中没有给出这个手势,所以我开始尝试使用 WM_TOUCH。我发现了这个例子http://msdn.microsoft.com/en-us/library/windows/desktop/dd940546%28v=vs.85%29.aspx这个例子的问题是,他们使用的 WndProc 只适用于个别形式。我想捕捉整个应用程序中的内容,所以我尝试使用 PreFilterMessage 而不是 WndProc。
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
public bool PreFilterMessage(ref Message m)
{
// Decode and handle WM_TOUCH message.
bool handled;
switch (m.Msg)
{
case WM_TOUCH:
Debug.WriteLine("PreFilter TOUCH: " + m.ToString());
handled = DecodeTouch(ref m);
break;
case 0x201:
Debug.WriteLine("PreFilter LEFTMOUSEDOWN: " + m.ToString());
handled = false;
break;
default:
handled = false;
break;
}
...
现在的问题是,当我尝试调用时, in与导致问题的LParam
inPreFilterMessage
不同。这是我的调试日志:LParam
WndProc
GetTouchInputInfo
PreFilter TOUCH: msg=0x240 hwnd=0x530598 wparam=0x1 lparam=0x3ff0573 result=0x0
WndProc TOUCH: msg=0x240 hwnd=0x530598 wparam=0x1 lparam=0xf170000 result=0x0
PreFilter LEFTMOUSEDOWN: msg=0x201 (WM_LBUTTONDOWN) hwnd=0x530598 wparam=0x1 lparam=0x14100c1 result=0x0
WndProc LEFTMOUSEDOWN: msg=0x201 (WM_LBUTTONDOWN) hwnd=0x530598 wparam=0x1 lparam=0x14100c1 result=0x0
为什么LParam
鼠标输入相同,而触摸输入不同?如何转换 PreFilterMessage 中的 LParam 以便我可以调用GetTouchInputInfo
?