MFC流程

具體參照《vc++深入詳解》
先是通過(先進入全局變量)// 唯一的一個 CMFCApplication1App(C+創建的工程+APP) 對象CMFCApplication1App theApp;(CWinApp 的唯一派生類
->
找到父類CWinAppEx
->
找到父類CWinApp(CWinApp的父類是CWinThread)並調用構造函數(MFC封裝好D:\VS2013\VC\atlmfc\src\mfc的appcore.cpp)
->
通過pModuleState->m_pCurrentWinApp = this;(this代表創建的程序)將MFC創建的程序與MFC封裝好的WimMain(在vs2013中封裝了MFC的_tWinMain 函數(D:\VS2013\VC\atlmfc\src\mfc的appmodul.cpp) 關聯起來 
->
進入_tWinMain函數(D:\VS2013\VC\atlmfc\src\mfc的appmodul.cpp) ,實際 _tWinMain 通過AfxWinMain(在D:\VS2013\VC\atlmfc\src\mfc的WinMain.cpp)實現。
->
進入AfxWinMain(在D:\VS2013\VC\atlmfc\src\mfc的WinMain.cpp),CWinThread* pThread = AfxGetThread();//獲取CWinThread,CWinApp* pApp = AfxGetApp();//獲取CWinAPP(AfxGetThread()的返回結果等於AfxGetApp() 即都是CWinApp(也就是程序的this指針並且this指針指向的是程序的C‘MFCName ’APP(全局變量的地址))),然後調用pApp->InitApplication()(完成MFC內部管理方面工作),pThread->InitInstance(InitInstance 是CMFCApplication1App 的虛函數,pThread 指向CMFCApplication1App  ,根據多態類InitInstance  實際上調用的是CMFCApplication1App  的InitInstance )()和nReturnCode = pThread->Run()三個函數完成Win32裏的幾個步驟:設計窗口類,註冊窗口類,創建呢窗口,顯示窗口,更新窗口,消息循環以及窗口過程函數
->
有了WinMain函數,就可以註冊窗口類:(D:\VS2013\VC\atlmfc\src\mfc的wincore.cpp)
AfxEndDeferRegisterClass完成註冊窗口:先是判斷窗口類的類型,根據類型賦予相應的類名(類名通過MFC預定義),之後調用AfxRegisterClass函數註冊窗口類
->
註冊完窗口類之後,經過程序的CMainFrame.cpp的CMainFrame類的
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)生成窗口,PreCreateWindow函數可以讓程序員在窗口產生前有機會修改窗口外觀(如去掉最大化按鈕)
->
生成窗口後,就是顯示和更新窗口通過APP.cpp文件的pMainFrame->ShowWindow(m_nCmdShow);pMainFrame->UpdateWindow();
->
消息循環通過
nReturnCode = pThread->Run();(在D:\VS2013\VC\atlmfc\src\mfc的WinMain.cpp)實現
->
窗口過程函數處理感興趣的消息,交給一個默認的窗口過程函數wndcls.lpfnWndProc = DefWindowProc;(D:\VS2013\VC\atlmfc\src\mfc的wincore.cpp),但不是所有消息都叫交給默認的窗口過程函數處理,而是採用一種稱之爲消息映射的機制來處理



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章