十三:谈谈MSG中的 WPARAM 和 LPARAM
第一: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
http://blog.csdn.net/ljd_1986413/article/details/6258604原文地址 第一:WPARAM 和 LPARAM 是什么东西 typedef uint w ...
- 消息中的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 ...
最新文章
- 一切为了AI!黄仁勋GTC大会发布全新DPU处理器,计算吞吐量三年跨越1000倍
- linux 核显驱动程序,支持下代核显 Intel放出Linux图形驱动
- python部落稿酬_Python之父考虑重构Python解释器
- Caffeine 和 Redis 居然可以这么搭,想不到吧!
- matlab啁啾信号,啁啾信号chirp(扫频余弦信号)
- Windows7 的激活命令小结
- 切换不了摄像头 高拍仪_高拍仪常见问题解答
- 微波雷达感应模块技术应用,多普勒雷达,人体存在感应模组
- 键盘选中一行或多行的快捷键
- AD158A4语音芯片介绍
- cocos 躲避球游戏(1) --创建项目和场景切换
- AI工具是帮手还是助手:
- python爬虫论文参考文献格式_Python爬虫进阶必备 | XX文学加密分析实例
- H3C 二层链路聚合
- java hashmap api_JAVA基础学习-集合三-Map、HashMap,TreeMap与常用API
- 国内做校园信息化的龙头企业公司有哪些?
- Sql Server访问excel的数据
- 吉首大学计算机专业宿舍,吉首大学宿舍条件,宿舍环境图片(10篇)
- SDL编程入门(19)游戏手柄和操纵杆
- linux下mysql 添加用户并分配全部权限