Windows窗体触地事件

问题描述 投票:4回答:3

我正在创建一个Windows Forms应用程序,该应用程序具有几个可单击的面板,这些面板需要等效于鼠标按下和按下事件的触摸屏。

[当我使用键盘和鼠标进行测试时,事件将正确触发,并且应用程序将按预期进行响应。但是,在触摸屏上进行测试时,不是这样。唯一可以正常工作的事件是click事件,但我的应用程序需要使用鼠标按下事件才能连续更新值。

有人遇到这样的问题并找到了解决方案吗?

c# winforms touch
3个回答
1
投票

只需阅读一下,我认为您需要重写WndProc并查找WM_TOUCH事件。

查看Windows 7 Multitouch .NET Interop Sample Library,其中包含有关处理Winform中的触摸和手势的示例。


1
投票

我不确定,但是您是否尝试过使用轻击事件来捕获触摸而不是单击事件?


1
投票

您必须重写WndProc,捕获消息并手动启动MouseDown和MouseUp事件

public const int WM_POINTERDOWN = 0x246;
public const int WM_POINTERUP = 0x247;

[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
protected override void WndProc(ref Message m)
{
    base.WndProc(m);
    switch (m.Msg)
    {
        case WM_POINTERDOWN:
            {
                MouseEventArgs args = new MouseEventArgs(MouseButtons.Left, 1, this.MousePosition.X, this.MousePosition.Y, 0);
                MouseDown(this, args);                    
                break;
            }

        case WM_POINTERUP:
            {
                MouseEventArgs args = new MouseEventArgs(MouseButtons.Left, 1, this.MousePosition.X, this.MousePosition.Y, 0);
                MouseUp(this, args);
                break;
            }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.