我用#define 定义一个自定义的消息:WM_USER_APPLY
这是我定义的消息映射:ON_MESSAGE (WM_USER_APPLY, OnApply)对OnApply消息处理函数形式的声明,根据MSDN的说法,应该写成这种形式:
afx_msg LRESULT OnApply(WPARAM, LPARAM); 我的问题:这两个参数WPARAM, LPARAM,应该是与自定义的消息有关的参数,可是它们含有什么信息呢?因为我见过一个例子程序的消息处理函数是这么用的:
LRESULT CChildView::OnApply (WPARAM wParam, LPARAM lParam)
RECTPROP* prp = (RECTPROP*)lParam;
(RECTPROP为自定义结构类型)
我不解的是,我怎么就知道参数lParam中就含用RECTPROP*的数据呢?而且我见到有的消息处理函数中wParam,lParam又都是0,这有什么规则吗?我在MSDN上也没有找到相关说明,你能告诉我吗?
这是我定义的消息映射:ON_MESSAGE (WM_USER_APPLY, OnApply)对OnApply消息处理函数形式的声明,根据MSDN的说法,应该写成这种形式:
afx_msg LRESULT OnApply(WPARAM, LPARAM); 我的问题:这两个参数WPARAM, LPARAM,应该是与自定义的消息有关的参数,可是它们含有什么信息呢?因为我见过一个例子程序的消息处理函数是这么用的:
LRESULT CChildView::OnApply (WPARAM wParam, LPARAM lParam)
RECTPROP* prp = (RECTPROP*)lParam;
(RECTPROP为自定义结构类型)
我不解的是,我怎么就知道参数lParam中就含用RECTPROP*的数据呢?而且我见到有的消息处理函数中wParam,lParam又都是0,这有什么规则吗?我在MSDN上也没有找到相关说明,你能告诉我吗?
你在SendMessage或PostMessage中传递的参数与你在OnApply中定义的
参数相同就可以了。
要记住:
如果进程间传递消息,使用指针就不行了,因为进程是不能相互访问私有地址的
如果是这样,需要定义共享内存。
我也知道自定义消息需要自己用SendMessage或PostMessage来调用,而且应该是m_wndChildView.SendMessage(WM_USER_APPLY,wParam,lParam),同样的道理,那我怎么知道wParam,lParam中含有什么数据呢? ,并且这些数据能为我所用呢?
再ON_MESSAGE (WM_USER_APPLY, OnApply)
再PostMessage(WM_USER_APPLY,NULL,NULL),或
SendMessage(WM_USER_APPLY,NULL,NULL);来调用OnApply();
这是最简单的用法,复杂的我也不清楚
数据是你自己写的,你还问我们wParam,lParam是什么数据?
你调用的时候是什么数据就是什么数据