MFC vs. SDK程序流程

你們都知道,windows API編程以及其消息處理,其過程都清晰可見,大致步驟以下:編程

1)聲明消息窗口類windows

2)註冊窗口類app

3)createwindows函數

4)消息得到以及分派(windows procedure)。.net

可是,對於MFC一樣是Windows程序,其流程卻顯得灰暗不明。先具體分析(備錄)以下:對象

在MFC中有兩個重要的類,CWinApp,CFrameWnd,它們兩個的存在在某種意義上來講代替了WinMain 和 WinProc的存在。blog

對於任何一個MFC程序,都存在一個Application Object(theApp),因爲它是一個全局對象,所以是一個程序的入口點,當TheApp構造完了之後,由連接器將WinMain加入到應用程序中,它調用了AfxWinMain()函數。以後在AfxWinMain中,執行了AfxWinInit(),pApp->InitApplication(),pApp->InitInstance(), pApp->Run();AfxWinTerm();完成程序的整個過程。內存

關於 InitInstance: 首先,它會new一個CFrameWnd成員,其構造函數調用了Create();create()裏面調用了createEx(),CreateEx()調用了PreCreateWindows();這裏面MFC默認註冊了5種類型的窗口類型(Wnd,controlbar, mdiframe, FrameOrView, OleControl)。
消息過程的流程:主要是調用AfxWndProc-〉AfxCallWndProc-> Wnd.WindowProc().這裏實際上是程序真正的處理過程,首先判斷是否爲WM_COMMAND消息;不是就按照一般的方法,進行處理(查找消息映射表,由宏創建起來的內存表),是就按照MFC規定的路線進行處理。CWnd::OnCommand()調用的是OnCmdMsg(),這裏MFC規定了其消息的路線(view ,document,framewnd,winapp)。get

 

轉自:http://blog.csdn.net/ingor/article/details/2085736iframe

相關文章
相關標籤/搜索