解密:WPARAM和LPARAM中的W和L分别代表什么意思

Windows消息的两个参数

曾经有那么一段时间,Windows还是一个16位的操作系统。

每一个Windows消息会携带两个参数,它们分别被叫做WPARAM和LPARAM。第一个参数是一个16位的数据(Word),所以它被称之为W。

第二个参数是一个32位的数据(Long),所以它被称之为L。

你可以使用W参数来传递诸如句柄和整数这一类的数据,对于指针数据来说,你可以使用L参数来传递它。当Windows被转换为32位版本之后,WPARAM也从原来的16位迁移到了32位,所以,虽然WPARAM中的W代表Word,但是它已经不再是一个16位的数据了。(甚至在64位操作系统中,这两个参数长度被进一步地扩展到了64位。)

了解这其中的历史故事还是有点用的。如果你仔细地观察一下Windows消息的设计,你会发现,如果消息中携带了某个指针信息,则这个指针通常会保存在消息的LPARAM参数中,如果携带的是一个句柄或者一个整数,则通常会使用WPARAM参数来保存。

了解了这个原理,我们在记忆某个Windows消息的参数的时候就会显得容易一点。相反的,如果一个消息的参数违反了上述的惯例,则你可能会想:不对劲,这里可能有点问题。

总结

Windows的消息设计体现了通用性设计的精髓:如果你不能确定未来这个东西会是什么,那么,现在就不要清楚地定义它。

解密:WPARAM和LPARAM中的W和L分别代表什么意思