现在的位置: 首页 > 综合 > 正文

关于wParam和lParam

2017年11月02日 ⁄ 综合 ⁄ 共 1393字 ⁄ 字号 评论关闭

  在VC的函数参数中常出现WPARAM和LPARAM,这两个有什么特殊意义么?它们的含义是不是要事先定义?

          WPARAM和LPARAM一般在消息里面用的很多,其实没有特殊的含义的。    是两普通的变量 。

         是怎样通过wParam,lParam传参数的呢?有时候表示点的坐标,有时表示控件的ID, 是不是事先定义好的?

        WPARAM 是32位无符号数,LPARAM ==long           是的,针对不同消息,wParam,lParam代表不同意义

       一般情况下,你通过消息机制进行通信的话,lparam和wparam可以用来传递你的参数,比如数据的指针和数据的长度等等!

         在Win32中,wParam lParam是用来传递消息数据的最常用的手段.   比如,对按键消息来说,鼠标的X和Y的坐标被压缩进lParam中对MFC来说,消息可以用多样的类型参数来传递,对用户自定义消息来说,只能用wParam和lParam来传递。  

        param是parameter的意思   wParam和lParam都作为函数的参数   只不过后者是16位,前者在win16中是16位,在win32中是32位    在windef.h中,有他们的定义 如下: 
typedef UINT WPARAM; 
typedef LONG LPARAM;  

在Win32 SDK中消息本身是作为一个结构体记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。这个记录类型叫做MSG,它在window中是这样声明的: 
typedef struct tagMSG { // msg 
HWND hwnd; //窗口句柄 
UINT message; //消息常量标识符 
WPARAM wParam; //32位消息的特定附加信息,具体表示什么处决于message 
LPARAM lParam; //32位消息的特定附加信息,具体表示什么处决于message 
DWORD time; //消息创建时的时间 
POINT pt; //消息创建时的鼠标位置 
} MSG; 

hwnd 接收消息的32位窗口句柄。窗口可以是任何类型的屏幕对象, 因为Win32能够维护大多数可视对象的句柄(窗口、对话框、按钮、编辑框等)。 
message 用于区别其他消息的常量值,这些常量可以是Windows单元中预定义的常量,也可以是自定义的常量。 
wParam 通常是一个与消息有关的常量值,也可能是窗口或控件的句柄。 
lParam 通常是一个指向内存中数据的指针。 

由于wParam,lParam和指针都是32位的,需要时可以强制类型转换。具体表示什么,与message相关,他们是事先定义好的。 如果自定义消息:#define WM_MYMESSAGE WM_USER+100,需确定wParam,lParam的意义   (假设wParam=0时发送数据,wParam=1时接收数据,lParam为CMyClass* 指针,指向一个CMyClass对象,准备要发送的数据或接收数据 发送WM_MYMESSAGE时 SendMessage(hwnd,WM_MYMESSAGE,0,pMyClassObject)  
接收消息的窗口,接收WM_MYMESSAGE中(CMyClass*)lParam参数即pMyClassObject传过来的数据

抱歉!评论已关闭.