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

Posted superCPP

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wParam和lParam两个参数到底是什么意思?相关的知识,希望对你有一定的参考价值。

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

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

  它的字面意义,w表示wordl表示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”有些取名不当。

以上是关于wParam和lParam两个参数到底是什么意思?的主要内容,如果未能解决你的问题,请参考以下文章

怎么用sendmessage()发送两个值

消息机制

SendMessage()函数的 第二、三、四个参数是啥 怎么用

c语言里的LPARAM类型对应的c#里是啥类型呢? LPARAM到底是怎么样的一个类型啊?

Wparam与Lparam的区别

wParam与lParam的区别