在Windows 7触摸屏设备上禁用右键单击触摸并按住

时间:2013-08-28 19:35:52

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

要查看我所指的右键点击事件,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并禁用“按住”右键单击功能。这会禁用旋转图标,但除非用户略微移动手指,否则鼠标仍然不会出现。我不明白为什么用户必须乱涂按钮。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

请试试这个,它在Windows 10中适用于我。这不是全局系统更改,按下并保持将继续在OS和其他程序中工作。它会禁用仅为您的窗口按住并保持。

。 。

[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);

。 。