谈谈MSG中的 WPARAM 和 LPARAM
http://blog.csdn.net/ljd_1986413/article/details/6258604原文地址
第一:WPARAM 和 LPARAM 是什么东西
typedef uint wparam;//就是无符号整形
typedef long lparam;//就是长整形
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传过来的数据
第二:WPARAM 和 LPARAM 所代表的意义
是两个消息参数,相当于长整数。例如一个鼠标左键按下的消息WM_LBUTTONDOW,那么左键按下时,鼠标位置在那里呢?
就需要用LPARAM参数来传递鼠标位置信息。
如://鼠标坐标
point.x=LOWORD(pMsg->lParam);//LOWORD取低位 后面四位 相对于客户窗体左上角的X偏移值
point.y=HIWORD(pMsg->lParam);//HIWORDs取高位 前面四位 相对于客户窗体左上角的Y偏移值
还有其他的信息在这个时候也要知道,就是Ctrl键是否也按下了等信息。
查看一下MSDN关于WM_LBUTTONDOW的帮助,你可以明白很多。
懒人的问题真多,对于自己定义的消息,你想在WPARAM 和 LPARAM里传什么参数,接受到的就是什么参数,比如说:
char str[]= "abcde ";
myWnd.SendMessage( WM_MYMESSAGE, (LPARAM)str, 0 );
这样接收到的wParam就可以当字符串处理。对于Windows预定义的消息,各自的这两个参数包含的信息各不相同。
param是parameter(参数)的意思
wParam和lParam都作为函数的参数
WPARAM:32位(双字节)的消息参数。值的格式和意思取决于主要的事件消息类型。在不同的情况下,WPARAM变元可能传输一个坐标点对,使用低字值标识次要的消息类型,提供某些其他的数据类型,或被完全忽略。在很多情况下,WPARAM值将被看成两个独立的字值,分别具有不同的功能。
LPARAM:32位(长整型)的消息参数。这个参数的值和意思取决于主事件消息类型。在不同的情况下,LPARAM变元可能提供一个字符串或记录结构的指针,分解为一组字、字节或标志值,或者往往完全没有用。
作为参数,在32为系统上它们的类型就是unsigned int,根据情况你可以放不同的数据、指针,只要是4字节的就行
谈谈MSG中的 WPARAM 和 LPARAM相关推荐
- 十三:谈谈MSG中的 WPARAM 和 LPARAM
第一:WPARAM 和 LPARAM 是什么东西 typedef uint wparam;//就是无符号整形 typedef long lparam;//就是长整形 typedef ...
- 消息中的wParam和lParam
具体是这么说: "在Win 3.x中,WPARAM是16位的,而LPARAM是32位的,两者有明显的区别.因为地址通常是32位的,所以LPARAM 被用来传递地址,这个习惯在Win32 AP ...
- WPARAM 与 LPARAM
WPARAM LPARAM2008-09-03 17:25根据字面意思理解: WPARAM就是DWORD_PARAMETER(双字节参数)的缩写. LPARAM就是LONG_PARAMETER(长整型 ...
- WPARAM 与 LPARAM 参数的解析 [C#、WinAPI]
先略谈一下什么是WPARAM 与 LPARAM 参数: 在我们的程序和WindowAPI打交道时,特别是在处理鼠标键盘消息时,WPARAM 与 LPARAM 参数会经常出现.在Win32 API中,W ...
- WPARAM 与 LPARAM
WPARAM LPARAM2008-09-03 17:25根据字面意思理解: WPARAM就是DWORD_PARAMETER(双字节参数)的缩写. LPARAM就是LONG_PARAMETER(长整型 ...
- WPARAM与LPARAM 之区别
WPARAM与LPARAM 之区别 在Win 3.x中,WPARAM是16位的,而LPARAM是32位的,两者有明显的区别.因为地址通常是32位的,所以LPARAM被用来传递地址,这个习惯在W ...
- wParam与 lParam
根据字面意思理解: WPARAM就是DWORD_PARAMETER(双字节参数)的缩写. LPARAM就是LONG_PARAMETER(长整型参数)的缩写. WPARAM:16位(双字节(在16位系统 ...
- (转载)WPARAM与LPARAM
根据字面意思理解: WPARAM就是DWORD_PARAMETER(双字节参数)的缩写. LPARAM就是LONG_PARAMETER(长整型参数)的缩写. WPARAM:16位(双字节(在16位系统 ...
- WPARAM和LPARAM的含义
lParam 和 wParam 是宏定义,一般在消息函数中带这两个类型的参数,通常用来存储窗口消息的参数. LRESULT CALLBACK WindowProc(HWND hwnd, UINT uM ...
最新文章
- vue3绑定多个事件
- hybris backoffice和产品主数据相关的一些sample data
- Tomcat一步步实现反向代理、负载均衡、内存复制
- c语言程序源代码_程序的编译、链接和执行
- 初探Golang(2)-常量和命名规范
- 最小公倍数的求解原理和证明
- duilib CPaintManagerUI的WM_PAINT消息
- java certification_Java Certification.Status方法代码示例
- 《个人信息安全规范》会让我们的信息更安全吗?
- 科技论文写作常用句式结构
- Windform c# pictureBox 更换背景图片
- [Objective-C] 010_Foundation框架之NSSet与NSMutableSet
- 如何写期望薪资、离职原因、求职意向?
- java对象与byte[]数组之间的相互转化,压缩解压缩操作
- android 均衡器_通过均衡器提高Android设备的声音质量
- 时间戳 和 时间的相互转换
- ppt怎么不显示动画效果的标记,看上去好乱啊
- 什么是匿名对象,匿名对象怎么使用
- 系统一键还原后发现无法激活windows解决方案
- 【js、vue-print-nb】js 在Chorme中打印页面去掉页眉页脚
热门文章
- 2018年社交电商巨大风口 无忧猴布局全国
- sort 排序 + unique 去重
- 2020年中国电吹风行业发展现状分析,小功率、便携式电吹风市场逐渐崛起「图」
- python诞生的时间地点人物_用Python来计算任意视频中各人物的出镜时间!这项目值50K吗?...
- SSM框架学习-SpringBoot和SpringMVC
- 实验一:Sniffer Pro网络分析器应用实验
- 信息学奥赛一本通:1057:简单计算器
- ceph osdmap crush 分析
- cas虚拟服务器上新建交换机,H3C CAS系统虚拟机安装
- mayavi中quiver3d颜色样例