wParam和lParam两个参数到底是什么意思?

时间:2022-03-07 18:40:03

在Windows的消息函数中,有两个非常熟悉的参数:wParam,lParam。

这两个参数的字面意义对于现在的程序来说已经不重要了,因为它是16位系统的产物,为了保持程序的可移植性,就将它保存了下来。

它的字面意义,w表示word,l表示long,对于32为系统来说,分别是无符号整数(unsigned int)和长整型(long),都是32位整数。所以,根据具体的消息解析参数即可,不用在乎其字面意义了。

下面是Windows的定义

/* Types use for passing & returning polymorphic values */
typedef UINT_PTR WPARAM;
typedef LONG_PTR LPARAM;
//下面是32位程序的宏定义
typedef _W64 unsigned int UINT_PTR, *PUINT_PTR;
typedef _W64 long LONG_PTR, *PLONG_PTR;

本文链接:http://www.cnblogs.com/vcpp123/p/5916064.html

下面是《Windows程序设计(第5版)》中第43页的解释,位于第3.1.3章节。

WndProc的第三个和第四个参数的类型分别为WPARAM和LPARAM。这些名称的起源还有一段“典故”。当Windows还是16位系统时,WndProc的第三个参数类型被定义为WORD,表示一个16位的无符号短整型,而第四个参数被定义为LONG,表示一个32的位有符号长整型,“PARAM”前缀“W”和“L”正是由此而来。但在32位版本的Windows中,WPARAM被定义为UINT,而LPARAM被定义为LONG(仍然为C语言的long数据类型),因此窗口过程的这两个参数都是32位的。这就有些令人疑惑,因为WORD类型中Windows98中仍然被定义为16位无符号短整型,因此“PARAM”的前缀“W”有些取名不当。