关于wParam和lParam

centuries 2002-05-29 08:45:11
在VC的函数参数中常出现WPARAM和LPARAM,这两个有什么特殊意义么?它们的含义是不是要事先定义?谢谢。
...全文
7490 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiaoying 2002-06-12
  • 打赏
  • 举报
回复
要想真正明白这个问题,你一定要学习单用API编程才行。
看看《WINDOWS 编程》这本书你就知道了,否则不会真正明白的。
Lemon_2000 2002-06-11
  • 打赏
  • 举报
回复
Window3.1、3.2及Win32s下编程,WPARAM 16位,LPARAM 32位。
Win32下编程,WPARAM 、LPARAM 32位
centuries 2002-06-10
  • 打赏
  • 举报
回复
_liang_(liang):
只不过后者是16位,前者在win16中是16位,在win32中是32位
Lemon_2000(柠檬):
WPARAM wParam; //32位消息的特定附加信息,具体表示什么处决于message
LPARAM lParam; //32位消息的特定附加信息,具体表示什么处决于message

它们到底是32位还是16位?
Lemon_2000 2002-06-09
  • 打赏
  • 举报
回复

在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传过来的数据
_liang_ 2002-06-09
  • 打赏
  • 举报
回复
param是parameter的意思
wParam和lParam都作为函数的参数
只不过后者是16位,前者在win16中是16位,在win32中是32位
在windef.h中,有他们的定义
如下:
typedef UINT WPARAM;
typedef LONG LPARAM;
centuries 2002-06-06
  • 打赏
  • 举报
回复
?
despird 2002-05-29
  • 打赏
  • 举报
回复
http://www.csdn.net/expert/topic/668/668032.xml?temp=.8598139
wistaria 2002-05-29
  • 打赏
  • 举报
回复
在Win32中,wParam lParam是用来传递消息数据的最常用的手段.
比如,对按键消息来说,鼠标的X和Y的坐标被压缩进lParam中
对MFC来说,消息可以用多样的类型参数来传递,对用户自定义消息
来说,只能用wParam和lParam来传递。
zhubo 2002-05-29
  • 打赏
  • 举报
回复
一般情况下,你通过消息机制进行通信的话,lparam和wparam可以用来传递你的参数,比如数据的指针和数据的长度等等!
netcoder 2002-05-29
  • 打赏
  • 举报
回复
WPARAM 是32位无符号数,LPARAM ==long
是的,针对不同消息,wParam,lParam代表不同意义
centuries 2002-05-29
  • 打赏
  • 举报
回复
是怎样通过wParam,lParam传参数的呢?有时候表示点的坐标,有时表示控件的ID, 是不是事先定义好的?
netlib 2002-05-29
  • 打赏
  • 举报
回复
WPARAM和LPARAM一般在消息里面用的很多,其实没有特殊的含义的。
是两普通的变量 。
class CNewsWindow { public: CNewsWindow(void); ~CNewsWindow(void); public: HWND m_hWnd; public: // 设置皮肤(位图资源名称,标题栏文本颜色) BOOL SetSkin(LPCTSTR lpSkinBitmapName,COLORREF CaptionColor=0x000000); // 创建窗口 BOOL Create(LPCTSTR lpWindowName,int nWidth=250,int nHeight=180); BOOL Create(LPCTSTR lpClassName,LPCTSTR lpWindowName,int nWidth,int nHeight); // 设置新闻标题、内容、链接 BOOL SetNews(LPCTSTR lpNewsTitle,LPCTSTR lpNewsContent,LPCTSTR lpNewsURL); // 显示窗口 void Show(); // 设置为主窗口,主窗口销毁后会退出消息循环 void SetMainWindow(BOOL bMainWindow=TRUE); // 设置自动关闭,如果为真,点击链接后窗口自动关闭 void SetAutoClose(BOOL bAutoClose=TRUE); public: BOOL IsWindow(); BOOL DestroyWindow(); private: #define NCT_CLOSE 0 #define NCT_VIEW 1 #define NCT_TITLE 2 #define NCT_CONTENT 3 typedef struct tagNEWSCONTROL { CString strText; int nType; int x; int y; int nWidth; int nHeight; RECT Rect; }NEWSCONTROL, *LPNEWSCONTROL; private: LPNEWSCONTROL m_pControls; int m_nControlCount; private: HCURSOR m_hArrowCursor; HCURSOR m_hHandCursor; HCURSOR m_hCurCursor; HICON m_hAppSmallIcon; HDC m_hSkinDC; HDC m_hCacheDC; HBITMAP m_hSkinBitmap; HBITMAP m_hSkinOldBitmap; HBITMAP m_hCacheBitmap; HBITMAP m_hCacheOldBitmap; HFONT m_hFont; HFONT m_hBoldFont; COLORREF m_CaptionColor; int m_nHoverIndex; int m_nDownIndex; BOOL m_bMainWindow; BOOL m_bAutoClose; BOOL m_bTracking; CString m_strURL; private: BOOL DrawWindow(); BOOL DrawWindowEx(); void DrawButton(HDC hDC,LPNEWSCONTROL pControl); void DrawStatic(HDC hDC,LPNEWSCONTROL pControl); void DrawNineRect(HDC hdcDest,RECT DestRect,RECT SrcRect,RECT NineRect,UINT crTransparent=0xFF00FF); RECT CreateRect(LONG left,LONG top,LONG right,LONG bottom); void CreateControl(LPNEWSCONTROL pControl,int nType,int x,int y,int nWidth,int nHeight,CString strText=_T("")); int ControlFromPoint(POINT pt); int ControlFromPoint(LPARAM lParam); void SetCursor(HCURSOR hCursor); public: LRESULT OnMessage(UINT message, WPARAM wParam, LPARAM lParam); LRESULT DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam); LRESULT OnEraseBkgnd(UINT message, WPARAM wParam, LPARAM lParam); LRESULT OnPaint(UINT message, WPARAM wParam, LPARAM lParam); LRESULT OnMouseMove(UINT message, WPARAM wParam, LPARAM lParam); LRESULT OnMouseHover(UINT message, WPARAM wParam, LPARAM lParam); LRESULT OnMouseLeave(UINT message, WPARAM wParam, LPARAM lParam); LRESULT OnLButtonDown(UINT message, WPARAM wParam, LPARAM lParam); LRESULT OnLButtonUp(UINT message, WPARAM wParam, LPARAM lParam); LRESULT OnControlClick(UINT message, WPARAM wParam, LPARAM lParam); LRESULT OnDestroy(UINT message, WPARAM wParam, LPARAM lParam); LRESULT OnSetCursor(UINT message, WPARAM wParam, LPARAM lParam); };

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧