MFC 滑鼠訊息處理

2021-07-02 23:56:04 字數 1926 閱讀 2977

1. 滑鼠事件和滑鼠訊息:

1) 滑鼠和游標的區別:滑鼠是指實體滑鼠,而游標就是滑鼠在螢幕上的表示,因此在程式設計中通常稱為游標;

2) 滑鼠事件:windows中分為是三種,按下或釋放滑鼠、雙擊滑鼠、移動滑鼠;

3) 上述三種滑鼠實際那將觸發滑鼠訊息,而滑鼠訊息分為兩類,一類是客戶區滑鼠訊息,另一類是非客戶區滑鼠訊息,一般非客戶區滑鼠訊息直接交由defwindowproc處理;

2. 客戶區滑鼠訊息:

1) 滑鼠訊息都屬於視窗訊息,因此訊息id的字首都是wm_,根據滑鼠左右中鍵的不同以及按下和釋放這兩個不同動作,滑鼠訊息的一般名稱為wm_xbuttonyyy;

2) 字首x有l、r、m分別表示滑鼠左鍵、右鍵和中鍵,yyy有down表示按下、up表示釋放、dblclk表示雙擊;

3) 如果滑鼠只有兩個鍵(左右鍵)則應用程式不會收到中間訊息,如果只有左鍵(單鍵滑鼠,這種滑鼠很少)則應用程式將不會收到右鍵訊息,可以使用win32 api函式getsystemmetrics來檢視滑鼠有幾個鍵,用法是:int nbuttoncount = ::getsystemmetrics(sm_cmousebuttons);,其中sm_是system metrics的縮寫(系統度量的意思),後面的字首c表示count,如果返回0則表示沒插滑鼠;

4) 雙擊滑鼠訊息:訊息id是wm_xbuttondblclk,但要注意的是並不是雙擊只會產生乙個dblclk訊息,而是按順序產生4個訊息,以左鍵雙擊為例

wm_lbuttondown ; 第一次按下滑鼠

wm_lbuttonup ; 第一次滑鼠釋放

wm_lbuttondbclk ; 第二次按下滑鼠,用dblclk替換了down

wm_lbuttonup ; 第二次滑鼠釋放

!在程式設計時要注意,不要讓同乙個鍵的連續單擊和雙擊執行不同的任務,這樣容易混淆導致混亂,原因就是上面的雙擊訊息產生順序,一般在雙擊的時候都是在第一次單擊時選中目標,而在第二次按下(即dblclk訊息產生後)才會執行一些特殊任務,比如windows作業系統雙擊開啟檔案就是這樣,第一次單擊時選中檔案並使圖示變色,而在第二次按下時才開啟檔案;

5) 視窗接受雙擊訊息的前提:在註冊視窗類時必須宣告為cs_dblclks,這在win32中遇到過,但是mfc為框架視窗類註冊是預設使用cs_dblclks,因此mfc程式總能接受滑鼠雙擊訊息;

6) 游標移動訊息:訊息id是wm_mousemove,接受該訊息的物件是游標底下的視窗,視窗會接收到快速報告游標位置的訊息,但是由於游標移動是頻繁的,windows並不是時時刻刻都報告游標移動訊息,因為這樣做的代價太大,很多其它訊息會被游標移動訊息淹沒,並且時刻都報告游標移動訊息會使程式效率降低,因此windows並不報告所有的游標訊息,而是每隔適當時間、適當位置報告一次,因此當游標在螢幕上快速劃過時系統只會報告少數的幾個訊息,只有在游標緩慢滑動的時候才可能捕捉到精確的游標軌跡;

7. 滑鼠訊息的處理:

1) 滑鼠訊息的訊息id、訊息條目、響應函式的對應關係,所有滑鼠訊息的形式都是統一的:

wm_xbuttonyyy ; 訊息id

on_wm_xbuttonyyy ; 訊息條目

afx_msg void onxbuttonyyy(uint nflags, cpoint point);

!還有乙個滑鼠移動訊息也類同;

2) 滑鼠訊息處理函式的引數:

i. point:記錄了滑鼠被按下、釋放時的客戶區座標(原點在客戶區左上角),如果滑鼠移動訊息則該引數記錄的是最近的游標位置;

ii. uflags:記錄了滑鼠訊息產生時的瞬時狀態,裡面有若干位標誌,字首mk_表示mask key,即掩碼的意思;

mk_lbutton、mk_mbutton、mk_rbutton:表示滑鼠的左、中、右鍵被按下

mk_control:ctrl鍵被按下

mk_shift:shift鍵被按下

!比如在檢測操作滑鼠的同時是否按下了ctrl鍵則可以:if ( nflags & mk_control )

MFC 滑鼠訊息

1 客戶區滑鼠 滑鼠基本分三種 單擊,雙擊,移動 wm lbuttondown 客戶區中按下滑鼠左鍵 wm leuttonup 客戶區中鬆開滑鼠左鍵 wm lbuttondblclk 客戶區中雙擊滑鼠左鍵 wm mbuttondown 客戶區中按下滑鼠中鍵 wm mbuttonup 客戶區中鬆開滑鼠...

MFC 新增滑鼠提示訊息

首先在.h檔案中新增成員變數 ctooltipctrl m mytip 在oninitdialog 中新增以下 m mytip.create this m mytip.addtool getdlgitem idc examinee 請輸入您的准考證號 m mytip.addtool getdlgit...

MFC訊息對映與處理

今天我們主要了解一下mfc程式的訊息對映 mfc程式中訊息的種類 a 視窗訊息 window message 這種訊息一般與視窗的內部運作有關,如建立視窗 繪製視窗和銷毀視窗等。通常,訊息是從系統傳送到視窗,或從視窗傳送到視窗。形式通常為ww 不包括ww command 如 wm create,告訴...