WinForms可滚动控制触摸行为

本文关键字:触摸 控制 滚动 WinForms | 更新日期: 2023-09-27 18:10:55

我有一个SplitContainer,其中包含Atalasoft的AnnotateViewer。类层次结构如下:

System.Windows.Forms.Control
  Atalasoft.Imaging.WinControls.ScrollPort
    ...
      Atalasoft.Annotate.UI.AnnotateViewer
        My.AnnotateViewer

现在的问题是:只要SplitContainer的内容小于实际视口,因此没有滚动条可见,触摸输入被解释为鼠标左下,鼠标移动和鼠标左上,这正是我所期望和喜欢看到的。我仍然可以用两只手指平移来滚动视图。但是:如果我缩放查看器,使我的内容比我的视口大,滚动条出现,触摸输入行为不同:水平平移保持不变,但垂直平移现在导致滚动,即使用一个手指。

问题是:这种行为是特定于alasoft,特定于winforms或特定于系统,我能做些什么来改变它吗?我想一个单一的手指总是转换为左键点击和移动。用两个手指滚动就可以了(而且已经可以了)

我担心它是特定于系统的,因为您可以在Word 2010中找到完全相同的行为。不过,它毕竟是微软的产品。

WinForms可滚动控制触摸行为

我开始讨厌这样一个事实:你总是在把你的问题输入论坛或类似的地方后突然得到灵感。

这个问题现在通过重新注册手势事件解决了。你可以注册所有的平移手势,除了水平和/或垂直的单指平移。

// adapt the gesture registration for this window
GESTURECONFIG[] gestureConfig = new[]
{
    // register for zoom gesture
    new GESTURECONFIG { dwID = GID_ZOOM, dwWant = GC_ZOOM, dwBlock = 0 },
    // register for pan gestures but ignore single finger (only use two-finger-pan to scroll)
    new GESTURECONFIG { dwID = GID_PAN, dwWant = GC_PAN, dwBlock = GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY | GC_PAN_WITH_SINGLE_FINGER_VERTICALLY }
};
SetGestureConfig(this.Handle, 0, (uint)gestureConfig.Length, gestureConfig, (uint)Marshal.SizeOf(typeof(GESTURECONFIG)));

细节:http://msdn.microsoft.com/de-de/library/dd353241%28v=vs.85%29.aspx

我认为这是你能得到的最干净的解决方案。

SetGestureConfig API接受GESTURECONFIG结构体作为它的第四个参数。如何传入GESTURECONFIG[]数组?