MFC框架结构简述
- 現(xiàn)在直接給出MFC程序執(zhí)行順序,但著重分析其運行機制和功能分析,其流程是“theApp全局對象定義->TestApp構(gòu)造函數(shù)->WinMain函數(shù)”。在執(zhí)行theApp對象的構(gòu)造函數(shù)之前先執(zhí)行CWinApp基類的構(gòu)造函數(shù),從而把我們自己創(chuàng)建的類和MFC類相關聯(lián)起來了。
- ?文檔應用程序中,都有五個類,部分類名和工程名相關聯(lián)。在MFC程序有且僅有一個從應用程序類(CWinApp)派生的類,而且僅有一個該派生類的實例化對象
?每個窗口會有一個稱為窗口過程的回調(diào)函數(shù)(WndProc),它帶有四個參數(shù),分別為:窗口句柄(Window Handle), 消息ID(Message ID), 和兩個消息參數(shù)(wParam, lParam), 當窗口收到消息時系統(tǒng)就會調(diào)用此窗口過程來處理消息。(所以叫回調(diào)函數(shù))
- ? ? ? ?Windows內(nèi)核維護著一個全局的系統(tǒng)消息隊列;按照線程的不同,系統(tǒng)消息隊列中的消息會分發(fā)到應用程序的UI線程的消息隊列中;
- ? ? ? ?應用程序的每一個UI線程都有自己的消息循環(huán),會不停地從自己的消息隊列取出消息,并發(fā)送給Windows窗體對象;
- ? ? ? ?Windows消息也可以分為隊列消息和非隊列消息。在隊列消息中,消息會先保存在消息隊列中,消息循環(huán)會從此隊列中取出消息并分發(fā)到各窗口處理 如:WM_PAINT,WM_TIMER,WM_CREATE,WM_QUIT,以及鼠標,鍵盤消息等。在非隊列消息中,消息會繞過系統(tǒng)消息隊列和線程消息隊列,直接發(fā)送到窗口過程進行處理 如:WM_ACTIVATE, WM_SETFOCUS, WM_SETCURSOR,WM_WINDOWPOSCHANGED
-
? ? ? ?線程消息隊列中WM_PAINT,WM_TIMER只有在Queue中沒有其他消息的時候才會被處理,WM_PAINT消息還會被合并以提高效率。其他所有消息以先進先出(FIFO)的方式被處理。
??注意:?postMessage發(fā)送的消息是隊列消息,它會把消息Post到消息隊列中; SendMessage發(fā)送的消息是非隊列消息, 被直接送到窗口過程處理
- 用戶自定義消息?
總結(jié)
- 上一篇: 解决:ClassNotFoundExce
- 下一篇: MFC框架机制详细论述