為什么鼠標單擊會變成雙擊 鼠標單擊變雙擊什么原因

對于這個問題,我還是建議你先看看MSDN技術文檔中關于鼠標點擊方面的內容,因為這些內容是我們開展研究的起點 。我也假定你基本了解鼠標的單擊轉換為雙擊的基本工作原理 。
在閱讀了相關的MSDN文檔之后,下面我們來看看文檔中的設計以及它如何影響你自己的用戶界面設計 。
首先,有些開發者將鼠標雙擊動作設計為執行不同于鼠標單機的獨立任務 。他們想知道是否可以在處理鼠標雙擊消息時,安全的忽略掉WM_LBUTTONDOWN這個消息 。
當鼠標按鈕被第一次按下的時候,窗口管理器不知道接下來會不會有第二次點擊 。(有時候用戶自己可能也不知道) 所以它會發出WM_LBUTTONDOWN消息并等待后面的更多消息 。
現在,假設你是一個程序員 , 你仍然希望繼續采用讓雙擊操作與單擊操作無關的設計方案 。你會怎么做呢?
能想到的一種方法是 , 在收到 WM_LBUTTONDOWN 消息時不做任何事情 , 除了設置一個計時器以在 GetDoubleClickTime() 毫秒內觸發 。如果在該時間內收到 WM_LBUTTONDBLCLK 消息,那么則認為發生了雙擊動作 。如果沒有,那么它一定是單擊,因此可以執行單擊操作(雖然稍微有些延遲) 。
【為什么鼠標單擊會變成雙擊 鼠標單擊變雙擊什么原因】如果你沒有設計雙擊事件處理 , 那么,這種基于等待的技術方案也是必要的,但是第二次單擊與第一次單擊一起會導致麻煩 。為什么這是必要的? 因為很多用戶在僅需要單擊的情況下 , 也會雙擊 。以下是可以看到“避免第二次點擊的延遲操作”的一些示例:
> 為任務欄通知圖標顯示的上下文菜單 。如果第一次單擊時上下文菜單立即出現,那么第二次單擊將關閉上下文菜單,讓用戶感到困惑 。“我點擊了一下 , 發生了一些事情,然后它就消失了 。” (用戶不會說“我雙擊了”;他們只是說他們點擊了 。雙擊是他們唯一知道怎么做的事情 , 所以他們只是稱之為“點擊” 。舉個例子,如果你只有一輛車,那么,你不會說 “今天我開的是我的藍色車” 。)
> 如果資源管理器處于一鍵模式,它會等待查看是否有第二次點擊 , 如果有,它會忽略它 。否則,當人們雙擊時 , 他們會啟動該程序的兩個副本 。此外,如果你禁止第二次點擊但不等待,那么他們啟動的程序就會卡在資源管理器窗口后面,因為用戶在啟動程序后點擊了資源管理器 。
> XP 風格的開始按鈕忽略第二次點擊 。否則,當人們雙擊“開始”按鈕時 , 第一次單擊將打開“開始”菜單,第二次單擊將關閉它! (這有時被稱為“去抖動” 。)
接下來,我們來看看一個關于延遲鼠標點擊的實現代碼 。

為什么鼠標單擊會變成雙擊 鼠標單擊變雙擊什么原因

文章插圖
請注意,因為我們正在處理的是鼠標雙擊事件,所以這里我們需要將CS_DBLCLKS屬性打開 。
wc.style = CS_DBLCLKS;
運行此程序時,單擊并雙擊客戶區 。請注意,該程序直到雙擊超時后才會對單擊做出反應,因為它正在等待查看你是否要繼續第二次單擊(因此是雙擊而不是單擊) 。
后面我們會說說高于兩次的鼠標點擊的情況 。
總結畢竟操作系統不是神仙,它需要盡一切可能去理解用戶的點擊行為 。
有時候,這真是太難了 。最后Raymond Chen的《The Old New Thing》是我非常喜歡的博客之一,里面有很多關于Windows的小知識,對于廣大Windows平臺開發者來說,確實十分有幫助 。
本文來自:《Logical consequences of the way Windows converts single-clicks into double-clicks》
最近我寫了個東西正如你們所知道的,拓撲梅爾智慧辦公平臺(Topomel Box)是一款綠色軟件,主要面向經常使用電腦的朋友 。它提供了各種提升辦公效率的小功能 , 同時操作上盡可能地簡單方便 。
我想:你值得擁有 。
為什么鼠標單擊會變成雙擊 鼠標單擊變雙擊什么原因

文章插圖