WPARAM與LPARAM的高位與低位問題

2021-08-16 03:35:22 字數 843 閱讀 4209

在寫訊息處理函式時,常會遇到wparam與lparam這兩個引數,這兩個引數都是dword型別的,也就是雙字或四位元組或32位長度的。有時想取這些引數裡的高位字或低位字,用什麼方法呢?查msdn說有兩個巨集函式可用:

取高位字:

word hiword( dword dwvalue);

取低位字:

word loword( dword dwvalue);

那麼word型別的怎麼取高位和低位呢?同樣的也有兩個巨集函式可用:

取高位位元組:

byte hibyte(  word wvalue );

取低位位元組:

byte lobyte(  word wvalue);

知道怎麼取高位低位了,還要怎麼拼裝word和dword,也是用巨集函式:

拼word:

word makeword(

byte blow,

byte bhigh

);拼dword:

dword makelong(

word wlow,

word whigh

);拼wparam:

wparam makewparam(

word wlow,

word whigh

);拼lparam:

lparam makelparam(

word wlow,

word whigh

);不知道為什麼wparam也是dword,拼wparam和lparam就另外做了巨集函式,不直接用dword就算了。

看了看delphi裡的原始碼,makewparam和makelparam最終是呼叫了makelong,不知vc等其它開發工具是不是這樣呢?

WPARAM和LPARAM的含義

具體的訊息表示 wm paint訊息,loword lparam 是客戶區的寬,hiword lparam 是客戶區的高 滾動條wm vscroll或wm hscroll訊息,loword wparam 指出了滑鼠對滾動條的操作。比如上 下 左 右 翻頁 移動等。擊鍵訊息,有wm syskeydow...

使用WPARAM或LPARAM 傳遞指標

在vc 中的定義 typedef uint ptr wparam typedef long ptr lparam typedef w64 unsigned int uint ptr,puint ptr typedef w64 long long ptr,plong ptr 可見wparam 是無符3...

鍵盤訊息中的LParam引數定義

0 15位 指定當前訊息的重複次數。其值就是使用者按下該鍵後自動重複的次數,但是重複次數不累積 16 23位 指定其掃瞄碼,其值依賴於oem廠商 24位 指定該按鍵是否為擴充套件按鍵,所謂擴充套件按鍵就是ctrl,alt之類的,如果是擴充套件按鍵,其值為1,否則為0 25 28位 保留字段,暫時不可...