正因為MFC是建立在C++的基礎(chǔ)上,所以我強調(diào)C/C++語言基礎(chǔ)對開發(fā)的重要性。利用C++的封裝性開發(fā)者可以更容易理解和操作各種窗口對象;利用C++的派生性開發(fā)者可以減少開發(fā)自定義窗口的時間和創(chuàng)造出可重用的代碼;利用虛擬性可以在必要時更好的控制窗口的活動。而且C++本身所具備的超越C語言的特性都可以使開發(fā)者編寫出更易用,更靈活的代碼。
在MFC中對消息的處理利用了消息映射的方法,該方法的基礎(chǔ)是宏定義實現(xiàn),通過宏定義將消息分派到不同的成員函數(shù)進行處理。下面簡單講述一下這種方法的實現(xiàn)方法:
代碼如下
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) //{{AFX_MSG_MAP(CMainFrame) ON_WM_CREATE() //}}AFX_MSG_MAP ON_COMMAND(ID_FONT_DROPDOWN, DoNothing) END_MESSAGE_MAP() |
經(jīng)過編譯后,代碼被替換為如下形式(這只是作講解,實際情況比這復(fù)雜得多):
//BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) CMainFrame::newWndProc(...) { switch(...) { //{{AFX_MSG_MAP(CMainFrame) // ON_WM_CREATE() case(WM_CREATE): OnCreate(...); break; //}}AFX_MSG_MAP // ON_COMMAND(ID_FONT_DROPDOWN, DoNothing) case(WM_COMMAND): if(HIWORD(wP)==ID_FONT_DROPDOWN) { DoNothing(...); } break; //END_MESSAGE_MAP() } } |
newWndProc就是窗口過程只要是該類的實例生成的窗口都使用該窗口過程。
所以了解了Windows的消息機制在加上對消息映射的理解就很容易了解MFC開發(fā)的基本思路了。