关于wParam和lParam
? 在VC的函數參數中常出現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傳過來的數據
總結
以上是生活随笔為你收集整理的关于wParam和lParam的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 推荐系统(4)-逻辑回归LR、POLY2
- 下一篇: GCC如何产生core dump