自定义消息中如果需要定义WPARAM和LPARAM,该怎么使用和分配?
写Windows程序不可避免要使用自定义的消息,也就是从WM_USER开始定义的消息。在定义一个消息后,往往我们还要定义针对该消息的WPARAM甚至是LPARAM。WPARAM和LPARAM是什么,可以参考MSDN的SendMessage或者WindowProc。归结成一点就是对应消息的额外附带信息。
从我个人的经历来看,当定义了一个消息并且还需要定义额外的附加信息时,往往该附加信息会被先定义到WPARAM上。为什么?很简单,因为SendMessage(HWND, UINT, WPARAM, LPARAM)中,WPARAM排地比较前面,写起来方便。特别是用多了MFC后,CWnd::SendMessage中WPARAM和LPARAM都默认是0,定义在WPARAM上,代码都可以少些几个字符。
但是,我不得不说,有时候我还挺困惑一个问题的,就是WPARAM和LPARAM中的W和L到底指代什么?既然两个参数都附带信息,并且被标注成不同的名字,那么区别又在哪里?在实际使用中进行混用或者怎么用怎么方便是否合适?
今天,写这篇文章就是我觉得日子不能这么浑浑噩噩地过啊。。。这些看似简单的问题,也许不简单啊。所以google和bing了一把。这里就把找到的一些资料汇总一下。
WPARAM和LPARAM在现今看来,其实区别不是很大。至少从所占用的字节数来看是一样的。32位的程序里都是32位的,64位的程序里都是64位。他们在系统头文件里一般是这么定义的:
1 typedef UINT_PTR WPARAM;
2 typedef LONG_PTR LPARAM;
他们的不同主要还是在16位Windows系统里。在16位的Windows系统里,WPARAM是16位,W指代“word”,而LPARAM是32位的,L指代“long”。
那么在使用上,他们有什么区别呢?从我找到的资料来看,当初消息的设计时,WPARAM主要用来作为句柄和整数的载体,而LPARAM用来传递指针或者复合型的数据,比方说WM_CREATE和WM_MOVE。
现在,我个人觉得两者在使用上的区别应该不大。但是看了这些设计想法,以后我会考虑把指针这些额外数据定义到LPARAM上。
自定义消息中如果需要定义WPARAM和LPARAM,该怎么使用和分配?的更多相关文章
- LRESULT与wParam和lParam的问题
在微软vc提供的头文件中有定义在winnt.h中typedef long LONG;在windef.h中typedef LONG LRESULT; 所以LRESULT就是long,也就是长整形之所以取 ...
- wParam与lParam的区别
wParam与lParam的区别 lParam 和 wParam 是宏定义,一般在消息函数中带这两个类型的参数,通常用来存储窗口消息的参数. LRESULT CALLBACK WindowProc(H ...
- wParam和lParam两个参数到底是什么意思?
在Windows的消息函数中,有两个非常熟悉的参数:wParam,lParam. 这两个参数的字面意义对于现在的程序来说已经不重要了,因为它是16位系统的产物,为了保持程序的可移植性,就将它保存了下来 ...
- SendMessage和PostMessage区别以及WPARAM 和 LPARAM区别
WPARAM 和 LPARAM wParam和lParam 这两个是Win16系统遗留下来的产物,在Win16API中WndProc有两个参数:一个是WORD类型的16位整型变量:另一个是LONG类型 ...
- WPARAM和LPARAM的含义
lParam 和 wParam 是宏定义,一般在消息函数中带这两个类型的参数,通常用来存储窗口消息的参数. LRESULT CALLBACK WindowProc(HWND hwnd, UINT uM ...
- 利用自定义消息处理函数的WPARAM或LPARAM参数传递指针
有自定义消息: #define WM_TEST WM_USER+121 消息处理函数: afx_msg void OnTest(WPARAM wParam,LPARAM lParam); 该消息是一个 ...
- ArcGIS中的坐标系统定义与投影转换【转】
ArcGIS中的坐标系统定义与投影转换 坐标系统是GIS数据重要的数学基础,用于表示地理要素.图像和观测结果的参照系统,坐标系统的定义能够保证地理数据在软件中正确的显示其位置.方向和距离,缺少坐标系统 ...
- 【转】+【举例】ArcGIS中的坐标系统定义与投影转换
背景知识: UTM (Universal Transverse Mercator)坐标系是由美国军方在1947提出的.虽然我们仍然将其看作与"高斯-克吕格"相似的坐标系统,但实际上 ...
- ArcGIS中的坐标系定义与转换 (转载)
原文:ArcGIS中的坐标系定义与转换 (转载) 1.基准面概念: GIS中的坐标系定义由基准面和地图投影两组参数确定,而基准面的定义则由特定椭球体及其对应的转换参数确定,因此欲正确定义GIS系统坐 ...
随机推荐
- 快速沃尔什变换(FWT)学习笔记 + 洛谷P4717 [模板]
FWT求解的是一类问题:\( a[i] = \sum\limits_{j\bigoplus k=i}^{} b[j]*c[k] \) 其中,\( \bigoplus \) 可以是 or,and,xor ...
- POJ3261(后缀数组+2分枚举)
Milk Patterns Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 12972 Accepted: 5769 Ca ...
- CentOS 6 命令行下安装 VirtualBox 虚拟机步骤
CentOS 6 命令行下安装 VirtualBox 虚拟机步骤 1. 准备工作 安装内核更新 yum install kernel-develyum update kernel*如果内核有更新,则需 ...
- PowerDesigner:导出SQL脚本以及问题解决
在PowerDesigner中点击DataBase -----------> Generate Datebase -----(可以点击Preview预览sql语句)------->设置 ...
- Linux Ctrl+Z的使用方法
假设你发现前台运行的一个程序需要很长的时间,但是需要干其他的事情,你就可以用 Ctrl-Z ,终止这个程序,然后可以看到系统提示: [1]+ Stopped /root/bin/rsync.sh 然后 ...
- dubbo 学习笔记 -- provider端
服务端的配置文件: provider.xml <?xml version="1.0" encoding="UTF-8"?> <beans ...
- 技术胖Flutter第四季-21导航的参数传递和接受-2
21导航的参数传递和接受-2 视频地址 https://www.bilibili.com/video/av35800108/?p=22 博客地址:https://jspang.com/post/flu ...
- java8--List转为Map、分组、过滤、求和等操作
利用java8新特性,可以用简洁高效的代码来实现一些数据处理~ 定义1个Apple对象: public class Apple { private Integer id; private String ...
- POJ - 1321 棋盘问题 dfs分层搜索(n皇后变式)
棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 47960 Accepted: 23210 Descriptio ...
- Installing cmake 2.8.8 or higher on Ubuntu 12.04 (Precise Pangolin) (转载)
转自:http://cameo54321.blogspot.com/2014/02/installing-cmake-288-or-higher-on.html Check the version o ...