C++中的多態大大簡化了編程,使得程序的抽象性更高,但是在MFC這樣一個龐大的類庫中,如果消息的傳遞采用多態機制,將在每個類中引入大量的虛表,不適用,因此MFC中的消息傳遞采用消息映射機制,記住,這就叫消息映射,不是別的。 使用class wizard自動生成的代碼中,和消息映射直接相關的語句是 [cpp] DECLARE_MESSAGE_MAP() 和 [cpp] view plaincopy BEGIN_MESSAGE_MAP(CDeawView,CView) ON_WM_LBUTTONDOWN() ....... ON_COMMAND(ID_FILE_PRINT,CView::OnfilePrint) END_MESSAGE_MAP() 這兩句構建了一個偉大的數據結構--MFC消息映射路由。這些宏的具體的代碼,有興趣的讀者可以刨根問底一下,我下面說說他們的作用吧,畢竟總結是一種重要的學習方法。它們的作用:DECLARE_MESSAGE_MAP為該類申明了記錄消息的框架,框架中每個元素由BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之間的內容填充,結果是產生了一個消息映射表。 內存中的映射表可視化表示可以參考侯捷《深入淺出MFC》Page417,這個龐然大物再次向我們昭示了其實,內存映射表是個巨大的數據結構而已,用來為諸如WM_PAINT這樣的消息決定流動路線。 在我們C++程序員的眼裡,虛函數是實現多態的完美方式,但是,永遠不要認為虛函數就是唯一,MFC的消息映射機制裡,各個類間消息映射表的穿針引線,同樣為我們帶來了多態的效果。這可能就叫做編程之美吧。