勤能补拙,Expter

成都游戏Coder,记录游戏开发过程的笔记和心得!

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,呵呵。

posted on 2008-12-24 10:04 expter 阅读(12353) 评论(2)  编辑 收藏 引用 所属分类: Visual C++ 笔记

评论

# re: WPARAM与LPARAM的区别 2008-12-24 13:34 沈臻豪(foxtail)

谢谢分享  回复  更多评论   

# re: WPARAM与LPARAM的区别 2011-01-08 22:19 likwo

可以,这个要支持  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理