關於wParam和lParam
WPARAM和LPARAM一般在訊息裡面用的很多,其實沒有特殊的含義的。 是兩普通的變數 。
是怎樣通過wParam,lParam傳引數的呢?有時候表示點的座標,有時表示控制元件的ID, 是不是事先定義好的?
WPARAM 是32位無符號數,LPARAM ==long 是的,針對不同訊息,wParam,lParam代表不同意義
一般情況下,你通過訊息機制進行通訊的話,lparam和wparam可以用來傳遞你的引數,比如資料的指標和資料的長度等等!
在Win32中,wParam lParam是用來傳遞訊息資料的最常用的手段. 比如,對按鍵訊息來說,滑鼠的X和Y的座標被壓縮排lParam中對MFC來說,訊息可以用多樣的型別引數來傳遞,對使用者自定義訊息來說,只能用wParam和lParam來傳遞。
param是parameter的意思 wParam和lParam都作為函式的引數 只不過後者是16位,前者在win16中是16位,在win32中是32位 在windef.h中,有他們的定義 如下:
typedef UINT WPARAM;
typedef LONG LPARAM;
在Win32 SDK中訊息本身是作為一個結構體記錄傳遞給應用程式的,這個記錄中包含了訊息的型別以及其他資訊。這個記錄型別叫做MSG,它在window中是這樣宣告的:
typedef struct tagMSG { // msg
HWND hwnd; //視窗控制代碼
UINT message; //訊息常量識別符號
WPARAM wParam; //32位訊息的特定附加資訊,具體表示什麼處決於message
LPARAM lParam; //32位訊息的特定附加資訊,具體表示什麼處決於message
DWORD time; //訊息建立時的時間
POINT pt; //訊息建立時的滑鼠位置
} MSG;
hwnd 接收訊息的32位視窗控制代碼。視窗可以是任何型別的螢幕物件, 因為Win32能夠維護大多數可視物件的控制代碼(視窗、對話方塊、按鈕、編輯框等)。
message 用於區別其他訊息的常量值,這些常量可以是Windows單元中預定義的常量,也可以是自定義的常量。
wParam 通常是一個與訊息有關的常量值,也可能是視窗或控制元件的控制代碼。
lParam 通常是一個指向記憶體中資料的指標。
由於wParam,lParam和指標都是32位的,需要時可以強制型別轉換。具體表示什麼,與message相關,他們是事先定義好的。 如果自定義訊息:#define WM_MYMESSAGE WM_USER+100,需確定wParam,lParam的意義 (假設wParam=0時傳送資料,wParam=1時接收資料,lParam為CMyClass* 指標,指向一個CMyClass物件,準備要傳送的資料或接收資料 傳送WM_MYMESSAGE時 SendMessage(hwnd,WM_MYMESSAGE,0,pMyClassObject)
接收訊息的視窗,接收WM_MYMESSAGE中(CMyClass*)lParam引數即pMyClassObject傳過來的資料