将触摸识别为MouseDown事件

时间:2014-05-29 18:15:03

标签: c# winforms touch

我正在使用C#构建益智游戏,触摸屏获胜。

我能够处理鼠标处理程序上的触摸事件,事实上,我什么都没做,但它已经识别出我的触摸。但是,有一个问题我无法弄清楚。 mouse_down只发生在我移动我的手指时,并且在我触摸屏幕时无法识别。

有没有人遇到过这个问题? 我应该实现一些触摸事件识别吗?如果是这样,你能指点一些文件或例子吗?

非常感谢提前

4 个答案:

答案 0 :(得分:9)

感谢@PiotrWolkowski

你对我应该遵循的方式是正确的...... 出现了一些其他问题,但我解决了覆盖WndProc的初始问题,如下所示:

protected override void WndProc(ref Message m)
    {
        switch (m.Msg)
        {
            case Win32.WM_POINTERDOWN:
            case Win32.WM_POINTERUP:
            case Win32.WM_POINTERUPDATE:
            case Win32.WM_POINTERCAPTURECHANGED:
                break;

            default:
                base.WndProc(ref m);
                return;
        }
        int pointerID = Win32.GET_POINTER_ID(m.WParam);
        Win32.POINTER_INFO pi = new Win32.POINTER_INFO();
        if (!Win32.GetPointerInfo(pointerID, ref pi))
        {
            Win32.CheckLastError();
        }
        Point pt = PointToClient(pi.PtPixelLocation.ToPoint());
        MouseEventArgs me = new MouseEventArgs(System.Windows.Forms.MouseButtons.Left, 1, pt.X, pt.Y, 0);
        switch (m.Msg)
        {
            case Win32.WM_POINTERDOWN:
                    Console.WriteLine("TOCOU" + pt);
                    (Parent as Jogo).Form1_MouseDown((this as object), me);
                break;

            case Win32.WM_POINTERUP:
                    Console.WriteLine("LEVANTOU");
                    (Parent as Jogo).Form1_MouseUp((this as object), me);
                break;

            case Win32.WM_POINTERUPDATE:
                    //Console.WriteLine("UPDATE");
                    (Parent as Jogo).Form1_MouseMove((this as object), me);
                break;
        }
    }

它得到了“Win32.cs”的支持,可以在这里下载:

https://gist.github.com/RSchwoerer/bc5c04899c0510aefca24f088a79cebf

希望这对你有所帮助;)

答案 1 :(得分:4)

一个听起来似乎是合理解决方案的建议是覆盖WndProc并搜索WM_TOUCH事件。更多详情:https://stackoverflow.com/a/15785333/3330348

答案 2 :(得分:2)

要执行正确的触摸操作,您不应该使用鼠标处理程序事件,因为触摸并使用鼠标处理程序它正在通过一个用于处理触摸作为鼠标的库,而不是您应该用于游戏的内容您可以使用fuser -k 80/tcp中的方法注册应用程序以处理触摸事件,下面是如何在您的应用程序中实现触摸处理的示例。

user32.dll

答案 3 :(得分:0)

这可能是触摸屏驱动程序出现的问题。许多触摸屏驱动程序都有实用程序,用于设置如何解释触摸并将其发送到Windows。有时只需更新驱动程序即可。