4

要查看我所指的右键单击事件,请参阅此视频

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

我已将此链接中的代码添加到应用程序中:

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并禁用按住右键单击功能。这禁用了旋转图标,但除非用户稍微移动手指,否则鼠标向下仍然不会发生。我不明白为什么用户必须涂鸦才能按住按钮。

4

2 回答 2

0

请试试这个,它在 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);

. . .

于 2016-07-07T21:40:29.630 回答
0

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

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

于 2015-12-18T00:52:41.117 回答