| Visual C++.NET編程講座之二(3) |
| 2.運行機制 在程序中,當定義一個(gè)類(lèi)對象時(shí),它會(huì )自動(dòng)調用相應的構造函數。所謂"類(lèi)對象",就是用該類(lèi)定義的"變量",這個(gè)"變量"又稱(chēng)為類(lèi)的一個(gè)實(shí)例。例如,theApp就是類(lèi)CSimpApp的一個(gè)對象。 MFC正是利用類(lèi)的這種"自動(dòng)調用相應的構造函數"特性,使得WinMain()函數的調用變成了應用程序框架內部的調用,所以我們在代碼中看不到每個(gè)Windows程序所必須有的WinMain()函數。 當應用程序運行到"CSimpApp theApp;"時(shí),系統就會(huì )先調用基類(lèi)CWinApp構造函數,進(jìn)行一系列的內部初始化操作,然后自動(dòng)調用CSimpApp的虛函數InitInstance(),該函數會(huì )進(jìn)一步調用相應的函數來(lái)完成主窗口的構造和顯示工作。下面來(lái)看看上述程序中InitInstance的執行過(guò)程。 首先執行的是: m_pMainWnd = new CMainFrame; 該語(yǔ)句用來(lái)創(chuàng )建從CFrameWnd類(lèi)派生而來(lái)的用戶(hù)框架窗口CMainFrame類(lèi)對象,繼而調用該類(lèi)的構造函數,使得Create函數被調用,完成了窗口創(chuàng )建工作。 然后執行后面兩句: m_pMainWnd->ShowWindow(m_nCmdShow); m_pMainWnd->UpdateWindow(); 用作窗口的顯示和更新。接下來(lái)調用: m_pMainWnd->MessageBox("你好,歡迎進(jìn)入MFC世界!"); 最后返回TRUE,表示窗口創(chuàng )建成功。 由于應用程序類(lèi)CWinApp是用來(lái)調用WinMain以及實(shí)例的初始化,因此每一個(gè)MFC應用程序有且只能一個(gè)這樣的應用程序類(lèi),且需要一個(gè)全局的對象實(shí)例,如上述程序中的theApp,當然也可換一個(gè)對象名。 InitInstance()完成初始化工作之后,接下來(lái)就是調用基類(lèi)CWinApp的成員函數Run(),執行應用程序的消息循環(huán),即重復執行接收消息并轉發(fā)消息的工作。當Run()檢查到消息隊列為空時(shí),將調用基類(lèi)CWinApp的成員函數OnIdle進(jìn)行空閑時(shí)的后臺處理工作。若消息隊列為空且又沒(méi)有后臺工作要處理時(shí),則應用程序一直處于等待狀態(tài),一直等到有消息為止。 當程序結束后,調用基類(lèi)CWinApp的成員函數ExitInstance(),完成終止應用程序的收尾工作。這就是MFC應用程序的運行機制。 3.MFC類(lèi)結構 Visual C++發(fā)展至今,MFC類(lèi)庫越來(lái)越強大,其基本層次結構如圖5所示,箭頭的方向是從派生類(lèi)指向基類(lèi)。 其中,CObject類(lèi)是MFC提供的絕大多數類(lèi)的基類(lèi)。該類(lèi)完成動(dòng)態(tài)空間的分配與回收,支持一般的診斷、出錯信息處理和文檔序列化等。 CCmdTarget類(lèi)主要負責將系統事件(消息)和窗口事件(消息)發(fā)送給響應這些事件的對象,完成消息發(fā)送、等待和派遣(調度)等工作,實(shí)現應用程序的對象之間協(xié)調運行。 CWinApp類(lèi)是應用程序的主線(xiàn)程類(lèi),它是從CWinThread類(lèi)派生而來(lái)。CWinThread類(lèi)用來(lái)完成對線(xiàn)程的控制,包括線(xiàn)程的創(chuàng )建、運行、終止和掛起等。 CDocument類(lèi)是文檔類(lèi),包含了應用程序在運行期間所用到的數據。 CWnd類(lèi)是一個(gè)通用的窗口類(lèi),用來(lái)提供Windows 中的所有通用特性。 CView 是用于讓用戶(hù)通過(guò)窗口來(lái)訪(fǎng)問(wèn)文檔以及負責文檔內容的顯示。 CFrameWnd 類(lèi)是從 CWnd 繼承來(lái)的,并實(shí)現了標準的框架應用程序。 CDialog 類(lèi)用來(lái)控制對話(huà)框窗口。 CMDIFrameWnd和CMDIChildWnd類(lèi)分別用來(lái)多文檔應用程序的主框架窗口和文檔子窗口的顯示和管理。 CMiniFrameWnd類(lèi)是一種簡(jiǎn)化的框架窗口,它沒(méi)有最大化和最小化窗口按鈕,也沒(méi)有窗口系統菜單,一般很少用到它。 |
聯(lián)系客服