WPARAM與LPARAM的高位與低位問題
阿新 • • 發佈:2019-01-26
在寫訊息處理函式時,常會遇到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等其它開發工具是不是這樣呢?