我正在尝试使用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;
}
...
现在的问题是,LParam
中的PreFilterMessage
与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
?
答案 0 :(得分:0)
我最终使用了一种不同的方法,因为我无法使用它。我使用透明表单作为叠加层(如this)来获取正确的消息。这样我得到了正确的LParam。另外,如果需要,我可以使用带有修改后的hWnd的CallWindowProc
将消息转发到叠加层下面的窗口。