Once upon a time, Windows was 16-bit. Each message could carry with it two pieces of data, called WPARAM
and LPARAM
. The first one was a 16-bit value (“word”), so it was called W. The second one was a 32-bit value (“long”), so it was called L.
You used the W parameter to pass things like handles and integers. You used the L parameter to pass pointers.
When Windows was converted to 32-bit, the WPARAM
parameter grew to a 32-bit value as well. So even though the “W” stands for “word”, it isn’t a word any more. (And in 64-bit Windows, both parameters are 64-bit values!)
It is helpful to understand the origin of the terms. If you look at the design of window messages, you will see that if the message takes a pointer, the pointer is usually passed in the LPARAM
, whereas if the message takes a handle or an integer, then it is passed in the WPARAM
. (And if a message takes both, the integer goes in the WPARAM
and the pointer goes in the LPARAM
.)