1

我正在尝试使用 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与导致问题的LParaminPreFilterMessage不同。这是我的调试日志:LParamWndProcGetTouchInputInfo

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

4

1 回答 1

0

我最终使用了不同的方法,因为我无法让它工作。我使用透明表单作为覆盖(像这样)来获取正确的消息。这样我就得到了正确的 LParam。CallWindowProc如果需要,我还可以使用修改后的 hWnd将消息转发到覆盖下方的窗口。

于 2014-12-18T10:07:30.483 回答