WinForms可滚动控制触摸行为

时间:2013-04-25 11:13:24

标签: c# winforms scroll touch

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

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

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

问题是:这种行为是针对特定于Atalasoft的,特定于WinForms还是系统特定的,我可以做些什么来改变它吗?我想要一根手指始终转换为左键单击并移动。用于滚动的两个手指很好(并且已经有效)。

我担心它是系统特定的,因为您可以在Word 2010中找到完全相同的行为。但是,它仍然是Microsoft的产品。

2 个答案:

答案 0 :(得分:0)

我开始讨厌这样一个事实:在最终将你的问题输入论坛或类似网站之后,你经常得到突然的灵感。

现在通过重新注册手势事件来解决此问题。您可以注册除水平和/或垂直单指平移之外的所有平移手势。

// 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

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

答案 1 :(得分:0)

SetGestureConfig API接受GESTURECONFIG结构作为其第4个参数。你如何传入GESTURECONFIG []数组?

相关问题