2013-08-28 97 views
4

要查看我指的是see this video的右键单击事件。通过触摸禁用右键单击并按住Windows 7触摸屏设备

我正在研究在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; 
} 

此代码禁用造成右键单击事件。然而,这个圈子还是会发生,并且不会发生事件。有没有办法让任何物理触摸作为鼠标向下计数,而不是开始右键点击过程?


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

回答

0

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

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

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

。 。 。