使用过程
消息传递过程中参与的对象
1. 消息响应窗体A
2. 消息发送窗体B
消息传递过程:
1. 自定义消息ID,用户自定义消息通常定义在WM_USER(0x0400)至0x7FFF范围内。
#define WM_TASK_UPDATE WM_USER + 123
2. 在窗体A中声明定义消息响应函数,该函数的类型必须是固定的:afx_msg LRESULT (CWnd::*)(WPARAM, LPARAM)
afx_msg LRESULT OnTaskUpdate(WPARAM wParam,LPARAM lParam);//声明
LRESULT CPropertiesWnd::OnTaskUpdate(WPARAM wParam,LPARAM lParam)//定义
{
TaskInfo* info = (TaskInfo*)wParam;//消息携带的数据对象
SetTaskInfo(info);
return S_OK;
}
3. 在窗体A中声明一个自定义消息映射宏:ON_MESSAGE(message, memberFxn ) ,其中message是消息的ID,memberFxn是映射message的消息响应函数。
ON_MESSAGE(WM_TASK_UPDATE,&CPropertiesWnd::OnTaskUpdate)
4. 在窗体B中声明一个窗口句柄对象并定义一个设置窗口句柄对象的函数。用来获取本窗体的窗口句柄。
HWND m_hPropWnd; //声明窗口句柄对象
void CFileView::setPropHwnd(HWND hWnd)//定义设置窗口句柄对象函数
{
m_hPropWnd = hWnd;
}
5. 在主窗体的OnCreate函数中获取B窗体的窗口句柄
m_wndFileView.setPropHwnd(m_wndProperties.GetSafeHwnd());
6. 窗体B中发送消息
::SendMessage(m_hPropWnd,WM_TASK_UPDATE,(WPARAM)task,0);