1. 程式人生 > >關於wParam和lParam

關於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傳過來的資料