【问题标题】:How to detect double click in Windows Store apps?如何检测 Windows Store 应用程序中的双击?
【发布时间】:2014-05-25 23:50:59
【问题描述】:

在 C++ Windows Store 应用程序中,主窗口上有一个名为 PointerPressed 的事件。我试图找到如何检测双击而不是单击。我没有看到与 PointerPressed 等效的事件会在鼠标双击时触发。

我还检查了 PointerPressed 事件参数,它似乎没有包含有关它是单击还是双击的信息。

使用 GestureRecognizer 上的 DoubleTapped 属性很容易执行此操作,但如果我不使用手势识别器怎么办?有没有办法检测到简单的鼠标双击???

谢谢。

编辑:它是针对 Windows 应用商店的纯 C++ Direct3D 应用程序,不使用 XAML 或任何类似的用户界面。

【问题讨论】:

  • 我很困惑,你说“使用 GestureRecognizer 有一个简单的方法”,然后说,“如果我不使用它,就没有简单的方法”。嗯,是的。当你任意决定不习惯事物时,就会发生这种情况。你想解决什么问题?
  • 对不起,我只是指出 GestureRecognizer 有这个功能,而基本窗口没有。
  • 为什么 CoreWindow 类 (msdn.microsoft.com/en-us/library/windows/apps/xaml/…) 没有 DoubleTapped 事件,就像 UIElement 或 GestureRecognizer 一样?换句话说,实现鼠标双击的正确方法是什么?
  • 目前我发现的唯一解决方法是使用 Pointer.Timestamp 属性,并检查自上次收到鼠标按下事件以来的时间是否小于系统双击时间。跨度>

标签: c++ windows-runtime windows-store-apps mouseevent double-click


【解决方案1】:

UIElement 上有一个 DoubleTapped 事件。无需使用GestureRecognizer

【讨论】:

  • 是的,但是如果我单击一个空窗口(例如包含 DirectX 上下文的窗口),如何获取它?
  • 我认为你还是应该在SwapChainPanel 上得到它,不是这样吗?
  • 我没有在 XAML 中开发我的应用程序。它是用于 Windows 应用商店的纯 Direct3D 应用程序,因此它不使用 面板
  • 啊,对不起,我错过了!
【解决方案2】:

利用 Pointer.Timestamp 属性,检查自上次收到鼠标按下事件以来的时间是否小于或等于双击时间。

这是伪代码:

static unsigned long long LastTimestamp = 0;
static unsigned long long DoubleClickTimeMS = 250;
if( event == mouse_down )
{
    if( (Pointer->Timestamp - LastTimestamp) / 1000 <= DoubleClickTimeMS )
    {
        //switch event for a double-click
        event = double_click;
    }
    LastTimestamp = Pointer->Timestamp;
}

【讨论】:

  • 如果你想支持单击(如果你决定添加双击事件通常你会这样做),你可能还需要一个计时器来引发单击事件在给定的时间内没有发生第二次点击。
【解决方案3】:

这可能是一个不好的答案,因为它没有回答问题,但从概念上讲,点击是一个事件。双击由两个单击组成,这两个单击分别是两个事件。由于一个手势由多个此类事件组成,我们看到双击实际上是一个手势。因此,您可能应该使用手势识别器。

【讨论】:

  • 所以基本上你的意思是,即使我只支持鼠标,我也应该使用手势识别器?
猜你喜欢
  • 2016-03-19
  • 2011-05-18
  • 2015-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-14
相关资源
最近更新 更多