处理触摸和手势事件
Processing Touch and Gesture Events
我正在开发一个 GUI,它涉及来自连接到 Windows 7 机器的电容式触摸面板的手势输入。 OS 安装了 Tablet PC 支持驱动程序,这些应该是唯一的通信方式。
我的主要方法是使用在 Microsoft.ink.dll 中引用的 InkCollector class。它使我能够访问足以实现我正在寻找的行为的 SystemGesture 事件。
现在的问题是 SystemGesture.Flick 事件到达非常缓慢,大约一整秒后。我知道正在进行识别 Flick 的处理,但它仍然使这个想法无法使用。
关于如何加快速度的任何想法?
我的初始化代码如下:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
InkCollector inkCollector = new InkCollector(this);
inkCollector.CollectionMode = CollectionMode.GestureOnly;
inkCollector.Enabled = true;
inkCollector.SetGestureStatus(ApplicationGesture.AllGestures, true);
inkCollector.SystemGesture += SystemGestureEventHandler;
inkCollector.Gesture += GestureEventHandler;
}
public void SystemGestureEventHandler(object o, InkCollectorSystemGestureEventArgs args)
{
switch (args.Id)
{
case SystemGesture.Drag:
outputText.AppendText("Drag" + Environment.NewLine);
break;
case SystemGesture.DoubleTap:
outputText.AppendText("DoubleTap"+ Environment.NewLine);
break;
case SystemGesture.Flick:
outputText.AppendText("Flick"+ Environment.NewLine);
break;
case SystemGesture.HoldEnter:
outputText.AppendText("HoldEnter"+ Environment.NewLine);
break;
case SystemGesture.HoldLeave:
outputText.AppendText("HoldLeave" + Environment.NewLine);
break;
case SystemGesture.Tap:
outputText.AppendText("Tap"+ Environment.NewLine);
break;
default:
break;
}
}
public void GestureEventHandler(object o, InkCollectorGestureEventArgs args)
{
foreach (Gesture gesture in args.Gestures)
{
switch (gesture.Id)
{
case ApplicationGesture.ArrowDown:
outputText.AppendText("Gesture: Arrow Down"+ Environment.NewLine);
break;
case ApplicationGesture.ArrowUp:
outputText.AppendText("Gesture: Arrow Up" + Environment.NewLine);
break;
case ApplicationGesture.Down:
outputText.AppendText("Gesture: Down" + Environment.NewLine);
break;
case ApplicationGesture.Up:
outputText.AppendText("Gesture: Up" + Environment.NewLine);
break;
default:
break;
}
}
经过一番挖掘,我发现延迟实际上是有意为之,是为了让手势被识别和完成。遗憾的是,无法修改此超时(参见:https://msdn.microsoft.com/en-us/library/ms827533.aspx)。
我不得不将墨水收集模式更改为:
inkCollector.CollectionMode = CollectionMode.InkAndGesture;
并禁用墨迹渲染到控件上:
inkCollector.DynamicRendering = false;
我正在开发一个 GUI,它涉及来自连接到 Windows 7 机器的电容式触摸面板的手势输入。 OS 安装了 Tablet PC 支持驱动程序,这些应该是唯一的通信方式。
我的主要方法是使用在 Microsoft.ink.dll 中引用的 InkCollector class。它使我能够访问足以实现我正在寻找的行为的 SystemGesture 事件。
现在的问题是 SystemGesture.Flick 事件到达非常缓慢,大约一整秒后。我知道正在进行识别 Flick 的处理,但它仍然使这个想法无法使用。
关于如何加快速度的任何想法?
我的初始化代码如下:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
InkCollector inkCollector = new InkCollector(this);
inkCollector.CollectionMode = CollectionMode.GestureOnly;
inkCollector.Enabled = true;
inkCollector.SetGestureStatus(ApplicationGesture.AllGestures, true);
inkCollector.SystemGesture += SystemGestureEventHandler;
inkCollector.Gesture += GestureEventHandler;
}
public void SystemGestureEventHandler(object o, InkCollectorSystemGestureEventArgs args)
{
switch (args.Id)
{
case SystemGesture.Drag:
outputText.AppendText("Drag" + Environment.NewLine);
break;
case SystemGesture.DoubleTap:
outputText.AppendText("DoubleTap"+ Environment.NewLine);
break;
case SystemGesture.Flick:
outputText.AppendText("Flick"+ Environment.NewLine);
break;
case SystemGesture.HoldEnter:
outputText.AppendText("HoldEnter"+ Environment.NewLine);
break;
case SystemGesture.HoldLeave:
outputText.AppendText("HoldLeave" + Environment.NewLine);
break;
case SystemGesture.Tap:
outputText.AppendText("Tap"+ Environment.NewLine);
break;
default:
break;
}
}
public void GestureEventHandler(object o, InkCollectorGestureEventArgs args)
{
foreach (Gesture gesture in args.Gestures)
{
switch (gesture.Id)
{
case ApplicationGesture.ArrowDown:
outputText.AppendText("Gesture: Arrow Down"+ Environment.NewLine);
break;
case ApplicationGesture.ArrowUp:
outputText.AppendText("Gesture: Arrow Up" + Environment.NewLine);
break;
case ApplicationGesture.Down:
outputText.AppendText("Gesture: Down" + Environment.NewLine);
break;
case ApplicationGesture.Up:
outputText.AppendText("Gesture: Up" + Environment.NewLine);
break;
default:
break;
}
}
经过一番挖掘,我发现延迟实际上是有意为之,是为了让手势被识别和完成。遗憾的是,无法修改此超时(参见:https://msdn.microsoft.com/en-us/library/ms827533.aspx)。
我不得不将墨水收集模式更改为:
inkCollector.CollectionMode = CollectionMode.InkAndGesture;
并禁用墨迹渲染到控件上:
inkCollector.DynamicRendering = false;