Holy cow, I wrote a book!
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.)