使用過程
消息傳遞過程中參與的對象
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);