WPARAM与LPARAM的区别

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6


WPARAM与LPARAM的区别。

具体是这么说:“在Win 3.x中,WPARAM是16位的,而LPARAM是32位的,两者有明显的区别。因为地址通常是32位的,所以LPARAM 被用来传递地址,这个习惯在Win32 API中仍然能够看到。在Win32 API中,WPARAM和LPARAM都是32位,所以没有什么本质的区 别。Windows的消息必须参考帮助文件才能知道具体的含义。如果是你定义的消息,愿意怎么使这两个参数都行。但是习惯上,我们愿意使用LPARAM传 递地址,而WPARAM传递其他参数。”

看一个例子就明白了:



程序代码

*在对话框中取出数据,并向其他窗口发送消息和数据,将数据指针作为一个参数发送   *
/

void
CTestDlg2:
:OnCommBtn
(
)

{
char szOut [30
]
;

GetDlgItemText (IDC_OUT
,szOut
,30
)
;

m_pParent -
>SendMessage
(WM_DLG_NOTIFY
,
(WPARAM
)szOut
)
;

}

/*在消息接收窗口中*/
/*映射消息处理函数*/
ON_MESSAGE (WM_DLG_NOTIFY
,OnDlgNotifyMsg
)


/*在视图中绘制出字符串 m_szOut*/
void CMy53_s1View :
:OnDraw
(CDC
* pDC
)

{
CMy53_s1Doc * pDoc
= GetDocument
(
)
;

ASSERT_VALID (pDoc
)
;

// TODO: add draw code for native data here

pDC -
>TextOut
(0
,0
,
"Display String"
)
;

pDC -
>TextOut
(0
,20
,m_szOut
)
;

}
/*处理通知消息,保存信息并更新显示*/
LONG CMy53_s1View :
:OnDlgNotifyMsg
(WPARAM wP
,LPARAM lP
)

{
m_szOut =
(
char
*
)wP
;

Invalidate (
)
;

return 0 ;

}


一个字符串的地址通过WPARAM来标识,再通过Windows消息发送出去;之后在消息处理函数中WPARAM接受到的参数就是该地址,然后就可以对该地址进行操作了~~~


这是Windows消息机制中经常用到的两个data type,呵呵。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6