MFC的消息映射機制


①、映射機制的原理
Windows 下的程序包括 Windows 系統都是基於消息機制的。
MFC消息映射機制的具體實現方法是:在每個能接收和處理消息的類中,定義一個消息和消息響應函數的靜態對照表,即消息映射表;
在消息映射表中,消息與對應的消息處理函數指針是成對出現的。某個類能處理的所有消息及其對應的消息處理函數的地址都列在這個類所對應的靜態表中;
當有消息需要處理時,程序只要搜索該消息靜態表,查看表中是否含有該消息,就可以知道該類能否處理此消息;
如果能處理該消息,則同樣依照靜態表能很容易找到並調用對應的消息處理函數!

②、一般情況下,一個MFC的消息映射在程序中有三處相關信息:1》消息響應函數的聲明 2》消息響應函數實現 3》用來關聯消息和消息響應函數的宏
具體見示例代碼……更為詳細的講解參見《深入淺出MFC 第二版 簡體中文版》 - 侯傑:http://www.cctry.com/thread-192-1-1.html


③、針對不同的 Windows 消息,MFC提供了不同的消息映射宏,主要分為如下六類:

1、Windows 消息映射宏
Windows 消息映射宏用於處理普通的窗口消息。此類消息映射宏前綴為“ON_WM_”,並且沒有參數;

2、命令消息映射宏
命令消息 WM_COMMAND 是一種特殊的窗口消息,它從一個窗口發送到另一個窗口,以處理來自用戶的請求,是 ON_COMMAND 宏和 ON_COMMAND_RANGE 宏;

3、控件通知消息映射宏
控件通知消息是指控件窗口發送到其父窗口的消息,其消息映射宏為 ON_CONTROL 和 ON_CONTROL_RANGE,有時在程序中並不見 ON_CONTROL 宏,而見 ON_BN_CLICKED 宏,
其實 ON_CONTROL 宏派生出許多的映射宏,包括 ON_BN_CLICKED 宏等;

4、控件通知消息映射宏
控件通知消息映射宏處理的窗口消息有 WM_COMMAND,WM_NOTIFY,其消息映射宏有 ON_NOTIFY 和 ON_NOTIFY_RANGE;

5、反射消息映射宏
反射消息是指子窗口向父窗口發送的通知消息或控件通知消息,父窗口將該消息轉化為相應的反射消息發送給子窗口優先處理。
處理窗口消息 WM_NOTIFY+WM_REFLECT_BASE 的宏是 ON_NOTIFY_REFLECT,處理窗口消息 WM_COMMAND+WM_REFLECT_BASE 的宏是 ON_CONTROL_REFLECT,
還有其他的反射消息宏,具體請參考MDSN。

6、擴展消息映射宏
有 ON_COMMAND | ON_COMMAND_RANGE | ON_NOTIFY | ON_NOTIFY_RANGE ……

④、自定義消息的發送與響應:
1、自定義消息號:#define WM_CCTRY_MSG (WM_USER+100)
2、在頭文件中添加消息響應函數的聲明:afx_msg LRESULT OnCcTryMsg(WPARAM wParam, LPARAM lParam);
3、在CPP文件中添加消息響應函數的實現:
LRESULT CXXXDlg::OnCcTryMsg(WPARAM wParam, LPARAM lParam) {
//相關代碼;
}
4、在 BEGIN_MESSAGE_MAP 與 END_MESSAGE_MAP 之間加入消息的映射代碼:ON_MESSAGE(WM_CCTRY_MSG, &CDlgTestDlg::OnCcTryMsg)
5、消息的發送:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM