在MFC項目開發中,涉及到不同模塊間數據信息的傳遞,如用戶在登錄界面成功登錄后向系統管理模塊發送用戶名和密碼等信息。
首先,需明確以下兩點:
- 誰要發送這個消息--消息發送方
- 誰要接受這個消息--消息接收方
本文以對象A向對象B發送消息為例進行講解,具體如下:
1.消息發送方:發送消息
首先在A的頭文件(*.h)中自定義這個消息:
1 #define WM_MyMessage WM_USER+100
或者:
1 const UINT WM_MYMESSAGE = WM_USER + n
需注意以下幾點:
- 所有自定義消息都是以WM_USER消息為基礎加上一個任意的自然數n來表示的,
n一般至少大於100
-
該消息一般加在stdafx.h 或resource.h 或*.h中,一般都是全局變量頭文件
- A是向外發送消息的對象,因此在A的某個方法(函數)里就會調用用來發消息的函數B::SendMessage()/B::PostMessage(),因為是B接受消息。
2.消息接收方:接受消息
消息接收方對象接受一個消息,需有以下三部分:
- 在頭文件(*.h)中有該消息的處理函數的原型;
- 在實現文件(*.cpp)中有接受消息映射的宏;
- 在實現文件(*.cpp)中有該消息的處理函數的具體實現。
2.1 頭文件中加上自定義消息的處理函數原型
在DECLARE_MESSAGE_MAP()語句之前,加如下形式的函數原型:
1 afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
對Win32來說,wParam, lParam是傳遞消息最常用的手段。
2.2 實現文件中加上接受消息映射的宏
在cpp文件里,BEGIN_MESSAGE_MAP語句之后,加如下形式的代碼:
1 ON_MESSAGE(WM_MyMessage, OnMyMessage)
也就是說WM_MyMessage消息對應OnMyMessage函數。注意,上面是不用分號結尾的。
2.3 在實現文件中給出消息處理函數的具體實現
1 LRESULT CBDlg::OnMyMessage( WPARAM wParam, LPARAM lParam ) 2 { 3 //處理用戶自定義消息
4 ......
5 return 0; 6 }
