[VC] 滑鼠事件的響應
滑鼠鍵包括左鍵、右鍵和中鍵(滾輪),每個鍵都有三種事件訊息,一是被按下,二是被釋放,三是雙擊。下表列出了滑鼠操作、訊息名稱及處理函式名。
滑鼠操作 | 訊息名稱 | 處理函式名 |
左鍵按下 | WM_LBUTTONDOWN | OnLButtonDown |
左鍵釋放 | WM_LBUTTONUP | OnLButtonUp |
左鍵雙擊 | WM_LBUTTONDBCLK | OnLButtonDbClk |
右鍵按下 | WM_RBUTTONDOWN | OnRButtonDown |
右鍵釋放 | WM_RBUTTONUP | OnRButtonUp |
右鍵雙擊 | WM_RBUTTONDBCLK | OnRButtonDbClk |
滑鼠移動 | WM_MOUSEMOVE | OnMouseMove |
滾輪移動 | WM_MOUSEWHEEL | OnMouseWheel |
下面說一下幾個訊息響應函式的原型(MFC下的)
按鍵按下和釋放以及滑鼠移動的原型是一樣的,引數的意義也都一樣,以左鍵按下為例。
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
nFlags表示滑鼠、Shift鍵和Ctrl鍵的狀態組合,可以有如下情況:
識別符號 | 功能描述 |
MK_CONTROL | Ctrl鍵被按下 |
MK_LBUTTON | 滑鼠左鍵被按下 |
MK_MBUTTON | 滑鼠中鍵被按下 |
MK_RBUTTON | 滑鼠右鍵被按下 |
MK_SHIFT | Shift鍵被按下 |
當鍵被按下時,對應的識別符號的值就為真。例如,在左鍵按下的響應中,如果Ctrl鍵同時被按下了,那麼MK_CONTROL值為真,這樣可以通過與操作及或操作來定義任意的按鍵組合。
point包含了無懈可擊當前位置相對於螢幕左上角的X和Y座標值。
滾輪的響應函式與上面的響應函式略有不同。
afx_msg void OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
nFlags和pt引數的含義同前面的nFlags和point,只說一下zDelta。
zDelta表示滾輪滾動的距離,是WHEEL_DELTA(被設定為120)的倍數,正數時,表示滾輪向前運動(離開使用者的方向,我們通常說的向上),負數時則相反。
這個WHEEL_DELTA是動作能否被響應的一個閾值。滾輪每滾過一個這樣的距離才能響應一次。之所以設定WHEEL_DELTA,是為適應將來可能出現的高解析度的甚至是可以自由滾動的滾輪而設計的。
再說一下關於滑鼠的捕獲
在上面的介紹中,我們提到了滑鼠的按下和釋放。如果我們在程式的視窗區按下滑鼠,移出視窗後再釋放滑鼠,這時這個釋放滑鼠的操作就會丟失。就是說,如果沒有采用滑鼠捕獲的話,當滑鼠在你的客戶區內的時候,你可以得到滑鼠的訊息,當它移出你的客戶之後,你就得到到滑鼠的訊息了。為防止這種情況的發生,可以採用滑鼠捕獲的技術。
在滑鼠開始使用時用SetCapture函式捕獲滑鼠,當滑鼠退出是用ReleaseCapture函式釋放捕獲。通常會在OnLButtonDown裡捕獲滑鼠,在OnLButtonUp裡釋放捕獲。
使用滑鼠捕獲時還必須注意的一點是系統中只能有一個程式呼叫SetCapture,在不使用時必須呼叫ReleaseCapture釋放。而GetCapture可以知道當前哪個視窗呼叫了SetCapture。
void SetCapture();
void ReleaseCapture();
呼叫ReleaseCapture時會產生一個WM_CAPTURECHANGED的訊息。
相關文章
- 手持裝置點選響應速度,滑鼠事件與touch事件的那些事事件
- MFC vc++ 中CTreeContrl如何自定義實現滑鼠單擊或雙擊響應事件 ,即重寫類似於控制元件的響應事件或訊息C++事件控制元件
- js中的事件響應JS事件
- 回車響應事件事件
- angular 的滑鼠事件Angular事件
- 滑鼠事件事件
- VC:滑鼠鉤子函式函式
- UITextView: 響應鍵盤的 return 事件UITextView事件
- cc.Node事件響應事件
- 網路安全事件應急響應事件
- 理解響應者和響應鏈如何處理事件事件
- 記錄下:iOS事件的事件的傳遞和響應iOS事件
- 滑鼠按鍵響應越快越好嗎?
- Matlab 實現介面相應滑鼠事件Matlab事件
- 滑鼠拖拽事件事件
- Java進階09 事件響應Java事件
- Flutter:如何響應觸控事件Flutter事件
- Flutter:如何響應互動事件?Flutter事件
- 事件傳遞和響應鏈事件
- Flutter事件響應原始碼分析Flutter事件原始碼
- Flutter 使用者互動事件的響應Flutter事件
- 可觀察性在事件響應中的作用事件
- EditText的點選事件遮蔽鍵盤響應事件
- jquery-中的滑鼠事件jQuery事件
- 記一次安全應急響應事件事件
- C#事件及響應方法概述C#事件
- iOS GestureRecognizer與UIResponder touch事件響應iOSUI事件
- angularjs中響應回車事件AngularJS事件
- 監聽滑鼠事件事件
- 滑鼠、鍵盤事件事件
- 事件 滑鼠事件 表單事件 from表單事件
- javaScript事件(五)事件型別之滑鼠事件JavaScript事件型別
- VC版DoEvents/處理事件事件
- 為Java應用程式新增退出事件響應Java事件
- UIDatePicker事件不響應問題UI事件
- Java進階學習之事件響應Java事件
- 事件傳遞和響應者鏈條事件
- UIResponder事件響應鏈學習筆記UI事件筆記