2

在C++ Windows Store應用程序中,主窗口上有一個名爲PointerPressed的事件。我試圖找到如何檢測雙擊而不是單擊。我沒有看到與鼠標雙擊時觸發的PointerPressed等效事件。如何檢測Windows Store應用程序中的雙擊?

我也檢查了PointerPressed事件參數,它似乎並不包含有關它是單擊還是雙擊的信息。

它易於使用它的DoubleTapped財產上的GestureRecognizer,但如果我不使用什麼手勢識別來執行?有沒有辦法檢測到簡單的鼠標雙擊?

謝謝。

編輯:它是一個純粹的C++ Direct3D應用程序,針對Windows應用商店,不使用XAML或任何類似的用戶界面事物。

+0

我很困惑,你說「有一個簡單的方法與GestureRecognizer做到這一點」,然後說,「如果我不使用,有是不容易的「。那麼,是的。當你擅自決定不使用某些東西時,會發生這種情況。你想解決什麼問題? – vcsjones

+0

對不起,我只是指出GestureRecognizer有這個功能,而基本的窗戶沒有這個功能。 – Deathicon

+0

爲什麼CoreWindow類(http://msdn.microsoft.com/zh-cn/library/windows/apps/xaml/windows.ui.core.corewindow.aspx)沒有DoubleTapped的事件,就像UIElement還是GestureRecognizer?換句話說,實現鼠標雙擊的正確方法是什麼? – Deathicon

回答

1

使用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; 
} 
1

這可能是一個不好的答案,因爲它不回答問題,但從概念上講,點擊是一個事件。雙擊包含兩個點擊,分別是兩個事件。由於手勢由多個此類事件組成,因此我們看到雙擊實際上是一種手勢。因此,你可能應該使用手勢識別器。

+0

所以基本上你是在暗示,即使我只支持一個鼠標,我應該使用手勢識別器而不管? – Deathicon

1

UIElement上有DoubleTapped事件。無需使用GestureRecognizer

+0

是的,但如何獲得它,如果我點擊一個空的窗口,如一個包含DirectX上下文的窗口? – Deathicon

+0

我認爲你仍然應該在'SwapChainPanel'上使用它,是不是這種情況? –

+0

我沒有在XAML中開發我的應用程序。它是Windows Store的純Direct3D應用程序,因此它不使用_panel_。 – Deathicon

相關問題