具體是這么說:“在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,呵呵。