如何在C#WinForms中区分WndProc中的触摸和鼠标?

时间:2016-06-01 12:45:52

标签: c# .net winforms

我们正在努力为WinForms中的控件提供触摸调整大小支持,我们的要求是在触摸应用程序时显示触摸大小调整PopUp,并在发生MouseUpMouseDown事件时关闭PopUp。

我们可以使用常量值WM_GESTURE = 0x0119来区分触摸,但PointerUpPointerDown在触摸时也变为TRUE,我们无法区分从其他事件中触摸鼠标。

有没有办法专门识别鼠标?

switch (m.Msg)
{                
    case WM_TOUCH:
        IsTouchEnabled = true;
        break;
    case WM_POINTERUP:
        IsTouchEnabled = false;
        break;
    case WM_POINTERDOWN:
        IsTouchEnabled = false;
        break;
 }

由于

1 个答案:

答案 0 :(得分:2)

您可以使用下面的 GetMessageExtraInfo 方法区分触控和鼠标按下。

    protected override void OnMouseDown(MouseEventArgs e)
    {
        Console.WriteLine("IsTouch: " + IsTouch());
        base.OnMouseDown(e);
    }

    public bool IsTouch()
    {
        uint extra = GetMessageExtraInfo();
        bool isTouchOrPen = ((extra & 0xFFFFFF00) == 0xFF515700);

        if (!isTouchOrPen)
            return false;

        bool isTouch = ((extra & 0x00000080) == 0x00000080);

        return isTouch;
    }

    [DllImport("user32.dll")]
    private static extern uint GetMessageExtraInfo();