请问wParam与lParam的区别?

来源:百度知道 编辑:UC知道 时间:2024/06/14 17:43:37
case WM_SYSCOMMAND:
if(wParam==IDM_ABOUT) DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
else DefWindowProc(hWnd, message, wParam, lParam);
break;

这里为什么不可以用lParam???

在Win 3.x中,WPARAM是16位的,而LPARAM是32位的,两者有明显的区别。因为地址通常是32位的,所以LPARAM 被用来传递地址,这个习惯在Win32 API中仍然能够看到。在Win32 API中,WPARAM和LPARAM都是32位,所以没有什么本质的区 别。
Windows的消息必须参考帮助文件才能知道具体的含义。如果是你定义的消息,愿意怎么使这两个参数都行。但是习惯上,我们愿意使用LPARAM传 递地址,而WPARAM传递其他参数。”
在Win32API的早期,为了保证和Win16API的代码可移植性MS定义了WPARAM和LPARAM两个宏。
当时保留了w前缀的原因一方面是由于WPARAM宏也已W开头,还有也因为要提醒程序员注意到可移植性,当然到了现在Win16早已退出历史舞台,这个前缀也就约定俗成的沿用下来了。

wParam和lParam是两个不同的参数,是消息附加参数.应为消息所提供的信息不够,比如WM_PAINT WM_COMMAND等.LOWORD(wparam)子窗口ID,HIWORD(wparam)通知码,lParam 子窗口句柄.