1. 程式人生 > >WPARAM與LPARAM的高位與低位問題

WPARAM與LPARAM的高位與低位問題

在寫訊息處理函式時,常會遇到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等其它開發工具是不是這樣呢?