【问题标题】:Disable right click via Touch and hold on Windows 7 Touchscreen device通过触摸禁用右键单击并按住 Windows 7 触摸屏设备
【发布时间】:2023-03-11 16:25:01
【问题描述】:

要查看我所指的右键单击事件,see this video

我正在开发一个在 Windows 窗体应用程序中添加缩放按钮的应用程序。当用户触摸按钮时,应用程序应该不断地缩放窗口。这通过监视按钮上的鼠标按下事件来工作。当鼠标按下时,计时器会继续放大视图。只要用户在初始触摸后手指滑动,它就可以正常工作。但是,如果用户一直按一个点,他们会得到一个小等待圈,然后是一个右键单击事件。

我已将this link 中的代码添加到应用程序中:

public bool PreFilterMessage(ref Message m)
{
    // Filter out WM_NCRBUTTONDOWN/UP/DBLCLK
    if (m.Msg == 0xA4 || m.Msg == 0xA5 || m.Msg == 0xA6) return true;
    // Filter out WM_RBUTTONDOWN/UP/DBLCLK
    if (m.Msg == 0x204 || m.Msg == 0x205 || m.Msg == 0x206) return true;
    return false;
}

此代码禁用生成的右键单击事件。但是,圆圈​​仍然会发生,并且不会发生 mousedown 事件。有没有办法让任何物理触摸都算作鼠标按下而不开始右键单击过程?


编辑我尝试转到Control Panel -> Pen and Touch 并禁用按住右键单击功能。这禁用了旋转图标,但除非用户稍微移动手指,否则鼠标向下仍然不会发生。我不明白为什么用户必须涂鸦才能按住按钮。

【问题讨论】:

    标签: c# winforms touch windows-7-x64 right-click


    【解决方案1】:

    触摸时显示的圆圈是 Windows 7 中引入的用于右键单击的手势。它被称为Press and Hold

    如果你想完全禁用这个手势,你需要在初始化表单时通过调用SetGestureConfig函数告诉操作系统。此函数允许您明确指定控件支持哪些手势。

    【讨论】:

      【解决方案2】:

      请试试这个,它在 Windows 10 中对我有用。这不是全局系统更改,按住将继续在操作系统和其他程序中工作。它仅对您的窗口禁用长按。

      。 . .

      [DllImport("kernel32.dll", EntryPoint = "GlobalAddAtomA", CharSet=CharSet.Ansi)]
      static extern UInt16 GlobalAddAtom(string lpString);
      
      [DllImport("user32.dll", EntryPoint = "SetPropA", CharSet = CharSet.Ansi)]
      static extern UInt32 SetProp(IntPtr hWnd, UInt32 lpString, UInt32 hData);
      

      。 . .

      UInt16 atom = GlobalAddAtom("MicrosoftTabletPenServiceProperty");
      if (atom != 0)
          SetProp(this.Handle, (UInt32)atom, 1);
      

      。 . .

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-28
        • 2017-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-20
        • 2013-06-28
        • 2014-09-02
        相关资源
        最近更新 更多