关于wParam和lParam
? 在VC的函數(shù)參數(shù)中常出現(xiàn)WPARAM和LPARAM,這兩個有什么特殊意義么?它們的含義是不是要事先定義?
????????? WPARAM和LPARAM一般在消息里面用的很多,其實沒有特殊的含義的。??? 是兩普通的變量 。
???????? 是怎樣通過wParam,lParam傳參數(shù)的呢?有時候表示點的坐標(biāo),有時表示控件的ID, 是不是事先定義好的?
??????? WPARAM 是32位無符號數(shù),LPARAM ==long?????????? 是的,針對不同消息,wParam,lParam代表不同意義
?????? 一般情況下,你通過消息機制進(jìn)行通信的話,lparam和wparam可以用來傳遞你的參數(shù),比如數(shù)據(jù)的指針和數(shù)據(jù)的長度等等!
???????? 在Win32中,wParam lParam是用來傳遞消息數(shù)據(jù)的最常用的手段.?? 比如,對按鍵消息來說,鼠標(biāo)的X和Y的坐標(biāo)被壓縮進(jìn)lParam中對MFC來說,消息可以用多樣的類型參數(shù)來傳遞,對用戶自定義消息來說,只能用wParam和lParam來傳遞。??
??????? param是parameter的意思?? wParam和lParam都作為函數(shù)的參數(shù)?? 只不過后者是16位,前者在win16中是16位,在win32中是32位??? 在windef.h中,有他們的定義 如下:?
typedef UINT WPARAM;?
typedef LONG LPARAM;??
在Win32 SDK中消息本身是作為一個結(jié)構(gòu)體記錄傳遞給應(yīng)用程序的,這個記錄中包含了消息的類型以及其他信息。這個記錄類型叫做MSG,它在window中是這樣聲明的:?
typedef struct tagMSG { // msg?
HWND hwnd; //窗口句柄?
UINT message; //消息常量標(biāo)識符?
WPARAM wParam; //32位消息的特定附加信息,具體表示什么處決于message?
LPARAM lParam; //32位消息的特定附加信息,具體表示什么處決于message?
DWORD time; //消息創(chuàng)建時的時間?
POINT pt; //消息創(chuàng)建時的鼠標(biāo)位置?
} MSG;?
hwnd 接收消息的32位窗口句柄。窗口可以是任何類型的屏幕對象, 因為Win32能夠維護(hù)大多數(shù)可視對象的句柄(窗口、對話框、按鈕、編輯框等)。?
message 用于區(qū)別其他消息的常量值,這些常量可以是Windows單元中預(yù)定義的常量,也可以是自定義的常量。?
wParam 通常是一個與消息有關(guān)的常量值,也可能是窗口或控件的句柄。?
lParam 通常是一個指向內(nèi)存中數(shù)據(jù)的指針。?
由于wParam,lParam和指針都是32位的,需要時可以強制類型轉(zhuǎn)換。具體表示什么,與message相關(guān),他們是事先定義好的。 如果自定義消息:#define WM_MYMESSAGE WM_USER+100,需確定wParam,lParam的意義?? (假設(shè)wParam=0時發(fā)送數(shù)據(jù),wParam=1時接收數(shù)據(jù),lParam為CMyClass* 指針,指向一個CMyClass對象,準(zhǔn)備要發(fā)送的數(shù)據(jù)或接收數(shù)據(jù) 發(fā)送WM_MYMESSAGE時 SendMessage(hwnd,WM_MYMESSAGE,0,pMyClassObject)?? 接收消息的窗口,接收WM_MYMESSAGE中(CMyClass*)lParam參數(shù)即pMyClassObject傳過來的數(shù)據(jù)
總結(jié)
以上是生活随笔為你收集整理的关于wParam和lParam的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 推荐系统(4)-逻辑回归LR、POLY2
- 下一篇: GCC如何产生core dump