win32程式設計 滑鼠訊息

2021-10-19 09:35:39 字數 3648 閱讀 8728

忙起來的時候感覺什麼都不缺,空下來以後才發現什麼都沒有。。。

----  網易雲熱評

一、基本滑鼠訊息

wm_lbuttondown - 滑鼠左鍵按下wm_lbuttonup        - 滑鼠左鍵抬起wm_rbuttondown - 滑鼠右鍵按下wm_rbuttonup        - 滑鼠右鍵抬起wm_mousemove      - 滑鼠移動訊息
1、訊息引數:

wparam,其他按鍵的狀態,例如ctrl/shift等 

lparam, 滑鼠的位置,視窗客戶區座標系。     

loword,x座標位置     

hiword,y座標位置,

2、滑鼠訊息使用:

一般情況滑鼠按下/抬起成對出現。在滑鼠移動過程中,會根據移動速度產生一系列的wm_mousemove訊息。  

case wm_mousemove://滑鼠移動(hwnd,lparam);break;case wm_paint:繪圖(hwnd);break;case wm_lbuttondown:左鍵按下(hwnd,wparam,lparam);break;case wm_lbuttonup:左鍵抬起(hwnd, wparam, lparam);break;void 左鍵按下(hwnd hwnd, wparam wparam, lparam lparam);swprintf_s(str, l"左鍵按下:鍵盤狀態:%08x,滑鼠座標(x:%d,y:%d)\n",wparam,loword(lparam),hiword(lparam) );writeconsole(g_dos視窗控制代碼, str, wcslen(str), null, null);//dos顯示}void 左鍵抬起(hwnd hwnd, wparam wparam, lparam lparam);swprintf_s(str, l"左鍵抬起:鍵盤狀態:%08x,滑鼠座標(x:%d,y:%d)\n", wparam,  loword(lparam), hiword(lparam));writeconsole(g_dos視窗控制代碼, str, wcslen(str), null, null);//dos顯示}void 繪圖(hwnd hwnd);hdc hdc = beginpaint(hwnd, &p);textout(hdc, g_x, g_y, l"哎呦", 2);endpaint(hwnd, &p);}void 滑鼠移動(hwnd hwnd, lparam lparam)
4、執行結果:

二、雙擊訊息         

wm_lbuttondblclk - 滑鼠左鍵雙擊wm_rbuttondblclk - 滑鼠右鍵雙擊
1、訊息引數:

wparam,其他按鍵的狀態,例如ctrl/shift等     

lparam ,滑鼠的位置,視窗客戶區座標系。           

loword,x座標位置           

hiword,y座標位置 

使用時需要在註冊視窗類的時候新增cs_dblclks 風格,否則視窗接收不到雙擊訊息

wc.style = cs_hredraw | cs_vredraw|cs_dblclks; //視窗變化,會重繪,視窗類的一般風格
2、訊息產生順序:

以wm_lbuttondblclk為例:wm_lbuttondown,wm_lbuttonup, wm_lbuttondblclk,wm_lbuttonup

3、相關**

case wm_lbuttondblclk:左鍵雙擊(hwnd,wparam,lparam);break;void 左鍵雙擊(hwnd hwnd, wparam wparam, lparam lparam);swprintf_s(str, l"左鍵雙擊:鍵盤狀態:%08x,滑鼠座標(x:%d,y:%d)\n", wparam,  loword(lparam), hiword(lparam));writeconsole(g_dos視窗控制代碼, str, wcslen(str), null, null);//dos顯示}
4、執行結果

三、滾輪訊息         

wm_mousewheel     - 滑鼠滾輪訊息

1、訊息引數:wparam

loword,其他按鍵的狀態        

hiword,滾輪的偏移量,是120的倍數,通過正負值表示表示滾動方向。 

正:向前滾動         

負:向後滾動   

lparam:滑鼠當前的位置,螢幕座標系         

loword:x座標         

hiword:y座標 

2、使用:通過偏移量,獲取滾動的方向和倍數。

3、相關**

case wm_mousewheel:滾輪滑動(hwnd,wparam,lparam);break;void 滾輪滑動(hwnd hwnd,wparam wparam,lparam lparam);swprintf_s(str, l"滾輪滑動 -- 按鍵狀態:%08x,偏移量:%d,滑鼠座標(%d,%d)\n",loword(wparam),偏移量,loword(lparam),hiword(lparam));writeconsole(g_dos視窗控制代碼, str, wcslen(str), null, null);}
4、執行結果

win32 訊息機制

2 windows訊息系統組成 訊息佇列 作業系統負責為程序維護乙個訊息佇列,程式執行時不斷地從訊息佇列進行訊息的獲取,處理訊息 訊息迴圈 應用程式不斷地獲取訊息,處理訊息構成訊息迴圈。3 win32訊息路由 1.訊息產生 2.系統將訊息排列到其應該排放的執行緒的訊息佇列中。3.執行緒中的訊息迴圈呼...

win32 訊息機制

本次使用的開發環境是vs2013,使用的開發語言是c c 建立的專案是win32專案 當 windows 應用程式開始執行時,系統會為該程式建立乙個訊息 佇列用於存放訊息,然後用 getmessage 等進行訊息獲取處理。程式從佇列中獲取訊息後處理 分為系統訊息佇列 有系統維護,存放系統產生的訊息如...

win32訊息機制

windows作業系統最大的特殊是良好的使用者互動性 訊息機制 產生訊息,傳遞訊息並處理訊息的過程 1.產生訊息 不可控 1 typedef struct tagmsg 2 msg 2.傳遞訊息 分成兩個部分,1 系統傳遞訊息給應用程式 不可控 2.應用程式傳遞訊息給應用程式 可控 windows作...