具體是這么說:“在Win 3.x中,WPARAM是16位的,而LPARAM是32位的,兩者有明顯的區(qū)別。因為地址通常是32位的,所以LPARAM 被用來傳遞地址,這個習(xí)慣在Win32 API中仍然能夠看到。在Win32 API中,WPARAM和LPARAM都是32位,所以沒有什么本質(zhì)的區(qū) 別。Windows的消息必須參考幫助文件才能知道具體的含義。如果是你定義的消息,愿意怎么使這兩個參數(shù)都行。但是習(xí)慣上,我們愿意使用LPARAM傳 遞地址,而WPARAM傳遞其他參數(shù)。”
看一個例子就明白了: 程序代碼*在對話框中取出數(shù)據(jù),并向其他窗口發(fā)送消息和數(shù)據(jù),將數(shù)據(jù)指針作為一個參數(shù)發(fā)送*/
void CTestDlg2::OnCommBtn()
{
char szOut[30];
GetDlgItemText(IDC_OUT,szOut,30);
m_pParent->SendMessage(WM_DLG_NOTIFY,(WPARAM)szOut);
}
/*在消息接收窗口中*/
/*映射消息處理函數(shù)*/
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消息發(fā)送出去;之后在消息處理函數(shù)中WPARAM接受到的參數(shù)就是該地址,然后就可以對該地址進行操作了~~~
這是Windows消息機制中經(jīng)常用到的兩個data type,呵呵。