九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

第03章 MFC應用程序框架

上傳人:dfg****19 文檔編號:247453401 上傳時間:2024-10-18 格式:PPT 頁數(shù):40 大小:398.50KB
收藏 版權申訴 舉報 下載
第03章 MFC應用程序框架_第1頁
第1頁 / 共40頁
第03章 MFC應用程序框架_第2頁
第2頁 / 共40頁
第03章 MFC應用程序框架_第3頁
第3頁 / 共40頁

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《第03章 MFC應用程序框架》由會員分享,可在線閱讀,更多相關《第03章 MFC應用程序框架(40頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、,單擊此處編輯母版標題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,*,第,3,章,MFC,應用程序框架,本章主要內(nèi)容:,MFC,的基本應用程序框架類,Windows,應用程序的文檔視圖結構,文擋,/,視圖結構的應用程序框架類,對象的動態(tài)創(chuàng)建,MFC,是一個框架(,Framework,)式類庫,框架式類庫同一般的類庫的不同之處在于,庫中的各個類之間是有聯(lián)系的,它們是按照框架所定義的模式去協(xié)作完成任務的。所以,要學習,MFC,,首先就要了解各個類之間是如何協(xié)作的以及它們的接口。,3.1,早期的應用程序框架 及其,MFC,類,應用程序的框架由兩個對象組成:應用程序類,CWinAp

2、p,的派生類對象和框架窗口類,CFrameWnd,的派生類對象,后者作為一個成員對象嵌在前者之中,。,3.1,早期的應用程序框架 及其,MFC,類,CObject,類為其派生類提供了支持序列化、調(diào)試信息、運行期類型信息等一些通用功能,這個類中封裝了窗口函數(shù),封裝了窗口的一些,通用功能。,封裝了應用程序主窗口的功能,3.1,早期的應用程序框架 及其,MFC,類,CObject,類為其派生類提供了支持序列化、調(diào)試信息、運行期類型信息等一些通用功能,這個類中封裝了窗口函數(shù),封裝了一些支持多任務的,功能,封裝了應用程序的一些通用功能,MFC,程序的運行步驟(主要是初始化),打開一個,MFC,APPWi

3、zard(exe,),工程,跟蹤其執(zhí)行步驟,可以發(fā)現(xiàn),是以下順序:,1,),CXXApp,中的全局變量定義,CXXApp,theApp,;,2,)調(diào)用,CXXApp,構造函數(shù),CXXApp,:,CXXApp,(),3,)進入,Winmain,函數(shù)(,_,tWinMain,為宏,值為,WinMain,),_,tWinMain,(),4,)完成初始化工作:包括窗口類注冊、窗口產(chǎn)生、顯示和更新,pThread,-,InitInstance,(),對于,MFC,程序,,MainFrame,View,ToolBar,,,Controlbar,等都是窗口,所以下面的窗口注冊與創(chuàng)建、顯示等要反復調(diào)用多次,一

4、次對應一個窗口,(,1,)注冊窗口類,AfxEndDeferRegisterClass,(,2,)創(chuàng)建窗口,CMainFrame:PreCreateWindow,()/,反復調(diào)用一次是給我們修改窗口屬性的機會,CFrameWnd:Create,(),(,3,)消息循環(huán),PumpMessage,(),涉及到,MFC,函數(shù)的源文件位置,根目錄:找到您安裝,VC98,下,MFC,的位置,比如我的機子上為:,D:Program FilesMicrosoft Visual StudioVC98MFC,。下面提供的就是相對路徑了。,CWinApp,構造函數(shù),: MFCSRCAPPCORE.CPP,AfxW

5、inMain,函數(shù):,MFCSRCWINMAIN.CPP,AfxEndDeferRegisterClass,函數(shù),: MFCSRCAPPCORE.CPP,CFrameWnd:PreCreateWindow,(),函數(shù):,MFCSRCWINFRM.CPP,CFrameWnd:Create,(),函數(shù):,MFCSRCWINFRM.CPP,CWnd:CreateEx,(),函數(shù):,MFCSRCWINCORE.CPP,CWinThread:Run,(),方法:,MFCSRCTHRDCORE.CPP,3.3,應用程序的,文檔,/,視圖結構及其框架類,class,CMyApp:public,CWinApp

6、,class,CMyDoc:public,CDocument,class,CMyView:public,CView,class,CMainFrame,:public,CFrameWnd,CWnd,*,m_pMainWnd,文檔模板,CMyDoc,*,CMyView:GetDocument,(),基本應用程序框架與,文檔,/,視圖結構應用,程序框架的對比,文檔類,文檔是一個,CDocument,派生對象,它負責存儲應用程序的數(shù)據(jù),并把這些信息提供給應用程序的其余部分。,CDocument,類對文檔的建立及歸檔提供支持并提供了應用程序用于控制其數(shù)據(jù)的接口,,一個文檔可以有多個視圖,每一個文檔都維護

7、一個與之相關視圖的鏈表(,CptrList,類型的,m_viewList,實例)。類,CDocument,中可遍歷對應的視圖:,POSITION,CDocument:GetFirstViewPosition,() const,CView,*,CDocument:GetNextView,(POSITION&,rPosition,) const,文檔與視圖進行通信的方式是調(diào)用文檔類的,UpdateAllViews,函數(shù) 。,UpdateAllViews,函數(shù)遍歷視圖列表,對每個視圖都調(diào)用其,OnUpdate,函數(shù)實現(xiàn)視圖的更新顯示。,視圖類,CView,類是所有視圖類的基類,它提供了用戶自定義視圖

8、類的公共接口。在,文檔,/,視圖,架構中,文檔負責管理和維護數(shù)據(jù);而視圖類則負責如下工作:,(,1,) 從文檔類中將文檔中的數(shù)據(jù)取出后顯示給用戶;,(,2,) 接受用戶對文檔中數(shù)據(jù)的編輯和修改;,(,3,) 將修改的結果反饋給文檔類,由文檔類將修改后的內(nèi)容保存到磁盤文件中。,文檔負責了數(shù)據(jù)真正在永久介質(zhì)中的存儲和讀取工作,視圖呈現(xiàn)只是將文檔中的數(shù)據(jù)以某種形式向用戶呈現(xiàn),因此一個文檔可對應多個視圖。,一個視圖只能被連接到一個文檔,但是一個文檔可以有多個視圖與之相連接,視圖類中成員函數(shù),GetDocument,CView,類首先要維護文檔與視圖之間的關聯(lián),它通過,CDocument,*,m_pDo

9、cument,保護性成員變量記錄關聯(lián)文檔的指針,并提供,CView:GetDocument,接口函數(shù)以使得應用程序可得到與視圖關聯(lián)的文檔。而在,CView,類的析構函數(shù)中,需將對應文檔類視圖列表中的本視圖刪除:,CView:CView,(),if (,m_pDocument,!= NULL),m_pDocument,-,RemoveView(this,);,視圖類中成員函數(shù),OnDraw,CView,中地位最重要的函數(shù)是,virtual void,OnDraw(CDC,*,pDC,) = 0;,從這個函數(shù)的聲明可以看出,,CView,是一個純虛基類。這個函數(shù)必須被重載,它通常執(zhí)行如下步驟:,(

10、,1,) 以,GetDocument,(),函數(shù)獲得視圖對應文檔的指針;,(,2,) 讀取對應文檔中的數(shù)據(jù);,(,3,) 顯示這些數(shù)據(jù)。,視圖類中成員函數(shù),OnUpdate,CView:OnUpdate,函數(shù)在文檔的數(shù)據(jù)被改變的時候被調(diào)用(即它被用來通知一個視圖的關聯(lián)文檔的內(nèi)容已經(jīng)被修改),它預示著我們需要重新繪制視圖以顯示變化后的數(shù)據(jù)。其中的,Invalidate(TRUE,),將整個窗口設置為需要重繪的無效區(qū)域,它會產(chǎn)生,WM_PAINT,消息,這樣,OnDraw,將被調(diào)用:,void,CView:OnUpdate(CView,*,pSender, LPARAM /*,lHint,*/,C

11、Object,* /*,pHint,*/),ASSERT(pSender,!= this);,UNUSED(pSender,); / unused in release builds,/ invalidate the entire pane, erase background too,Invalidate(TRUE,);,假如文檔中的數(shù)據(jù)發(fā)生了變化,必須通知所有鏈接到該文檔的視圖,這時候文檔類的,UpdateAllViews,函數(shù)需要被調(diào)用。,框架窗口類,框架窗口為應用程序的用戶界面提供結構框架,它是應用程序的主窗口,負責管理其包容的窗口。一個應用程序啟動時會創(chuàng)建一個最頂層的框架窗口。,文檔模

12、板管理者類,CDocManager,在,文檔,/,視圖,架構的,MFC,程序中,提供了文檔模板管理者類,CDocManager,,由它管理應用程序所包含的文檔模板。,CDocManager,類維護一個,CPtrList,類型的鏈表,m_templateList,(即文檔模板鏈表,實際上,,MFC,的設計者在,MFC,的實現(xiàn)中大量使用了鏈表這種數(shù)據(jù)結構),文檔模板類,CDocTemplate,文檔模板類,CDocTemplate,是一個抽象基類(這意味著不能直接用它來定義對象而必須用它的派生類),它定義了文檔模板的基本處理函數(shù)接口。對一個單文檔界面程序,需使用單文檔模板類,CSingleDocT

13、emplate,,而對于一個多文檔界面程序,需使用多文檔模板類,CMultipleDocTemplate,。,文檔模板掛接了文檔、視圖和框架窗口,使得它們得以互相關聯(lián)。,3.9.1,應用程序各對象創(chuàng)建的順序,應用程序對象,文檔模板對象,文檔對象,視圖對象,框架窗口對象,系統(tǒng),架構之相互關系,1,、模板、文檔、視圖、框架的關系,可以概括其聯(lián)系為:,(,1,)文檔保留該文檔的視圖列表和指向創(chuàng)建該文檔的文檔模板的指針;文檔至少有一個相關聯(lián)的視圖,而視圖只能與一個文檔相關聯(lián)。,(,2,)視圖保留指向其文檔的指針,并被包含在其父框架窗口中;,(,3,)文檔框架窗口(即包含視圖的,MDI,子窗口)保留指向

14、其當前活動視圖的指針;,(,4,)文檔模板保留其已打開文檔的列表,維護框架窗口、文檔及視圖的映射;,(,5,)應用程序保留其文檔模板的列表。,應用程序以文檔為中心,文檔模板,文檔模板,文檔模板,文檔模板,應用程序,文檔模板,文檔模板,文檔模板,文檔模板,應用程序,框架窗口,視圖對象,視圖對象,視圖對象,活動視圖,文檔對象,視圖指針鏈表,視圖鏈表,單文檔模板中文檔、文檔模板、視圖和框架類的互相訪問,應用程序,框架對象,視圖對象,文檔對象,GetActiveDocument,(),GetActiveView,(),GetParent,(),GetParentFrame,(),GetDocument

15、,(),GetFirstViewPosition,(),GetNextView,(),UpdateAllView,(),AfxGetApp,(),AfxGetMainWnd,(),子窗口框架,GetActiveDocument,(),GetActiveView,(),多文檔模板中文檔、文檔模板、視圖和框架類的互相訪問,應用程序,視圖對象,文檔對象,框架對象,GetActiveFrame,(),MDIGetActive,(),GetParent,(),GetParentFrame,(),GetDocument,(),GetFirstViewPosition,(),GetNextView,(),U

16、pdateAllView,(),AfxGetApp,(),AfxGetMainWnd,(),關于文檔和視圖的關系,可進一步細分為三類:,(,1,)文檔對應多個相同的視圖對象,每個視圖對象在一個單獨的,MDI,文檔框架窗口中;,(,2,)文檔對應多個相同類的視圖對象,但這些視圖對象在同一文檔框架窗口中(通過,拆分窗口,即將單個文檔窗口的視圖空間拆分成多個單獨的文檔視圖實現(xiàn));,(,3,)文檔對應多個不同類的視圖對象,這些視圖對象僅在一個單獨的,MDI,文檔框架窗口中。在此模型中,由不同的類構造成的多個視圖共享單個框架窗口,每個視圖可提供查看同一文檔的不同方式。例如,一個視圖以字處理模式顯示文檔,

17、而另一個視圖則以,文檔結構圖,模式顯示文檔。,3.9.3,文檔,/,視圖應用程序消息的傳遞,活動的視圖對象,文檔模板對象,文檔對象,框架窗口對象,應用程序對象,:,DefWindowProc,(),3.4,對象的動態(tài)創(chuàng)建,struct,CRuntimeClass,LPCSTR,m_lpszClassName,;,CRuntimeClass,*,m_pBaseClass,;,CRuntimeClass,*,m_pNextClass,;,;,類名與對象創(chuàng)建函數(shù)關聯(lián)表,CMyDoc,m_pfnCreateObject,CreateObject,(),類名,指針,CMyWnd,m_pfnCreateO

18、bject,CreateObject,(),類名,指針,CMyView,m_pfnCreateObject,CreateObject,(),類名,指針,.,.,.,CMyDoc,m_pfnCreateObject,CreateObject,(),m_pNextClass,CMyDoc,CMyWnd,m_pfnCreateObject,CreateObject,(),m_pNextClass,CMyWnd,CMyView,m_pfnCreateObject,CreateObject,(),m_pNextClass,CMyView,補充:,MFC,的調(diào)試技術,斷言(,ASSERT,),ASSERT

19、(,booleanExpression,),參數(shù):,booleanExpression,指定了一個表達式(包含指針變量),其計算結果為非零值或,0,。 說明:這個宏計算它的參數(shù)。如果結果為,0,,則輸出一個調(diào)試信息并退出程序。如果結果為非零值,它什么也不做。注意:這個函數(shù)僅在,MFC,的調(diào)試版本中有效。在,MFC,的發(fā)行版本中,,ASSERT,并不計算表達式的值,因而也不會中斷程序。如果不管環(huán)境如何,表達式都必須被計算,用,VERIFY,宏來代替,ASSERT,。,示例:,/ ASSERT,的例子,CAge,*,pcage,= new,CAge,( 21 );,/,CAge,is derive

20、d from,CObject,.,ASSERT(,pcage,!= NULL )ASSERT(,pcage,-,IsKindOf,( RUNTIME_CLASS(,CAge,) ) )/,僅當,pcage,不是一個,CAge,*,指針時才結束程序。,診斷(,VERIFY,),VERIFY(,booleanExpression,),參數(shù):,booleanExpression,指定了一個表達式(包含指針變量),其計算結果為非零值或,0,。 說明:在,MFC,的調(diào)試版本中,,VERIFY,宏計算它的參數(shù)。如果結果是,0,,這個宏就打印出一條消息并中止程序。如果結果為非零值,它就不做任何操作。注意:

21、在,MFC,的發(fā)行版本中,,VERIFY,計算表達式的值,但是并不輸出或中斷程序。例如,如果這個表達式是一個函數(shù)調(diào)用,這個調(diào)用會被執(zhí)行。,ASSERT_VALID,ASSERT_VALID,(,pObject,),參數(shù):,pObject,指定了從,CObject,繼承的類的對象,它具有,AssertValid,成員函數(shù)的重載版本。 說明:這個函數(shù)用于檢驗你對對象內(nèi)部狀態(tài)的有效性的假定。,ASSERT_VALID,調(diào)用作為參數(shù)傳遞給它的對象的,AssertValid,成員函數(shù)。注意:這個函數(shù)僅在,MFC,的調(diào)試版本中才有。,在,MFC,的發(fā)行版本中,,ASSERT_VALID,什么也不做。在調(diào)試

22、版本中,它檢驗一個指針是否為,NULL,,并且調(diào)用對象自己的,AssertValid,成員函數(shù)。如果這些測試中有些失敗了,它就按照與,ASSERT,相同的方式顯示一個警告信息。,跟蹤,(TRACE)TRACE( exp ),參數(shù):,exp,指定了可變數(shù)目的參數(shù),它們的使用方式與運行時函數(shù),printf,中的可變數(shù)目的參數(shù)相同。 說明:提供了與,printf,函數(shù)類似的功能,可以向轉儲設備,例如文件或調(diào)試終端發(fā)送格式化字符串。與,MS-DOS,下的,C,程序中的,printf,類似,,TRACE,宏是在程序指向時跟蹤變量值的簡便方式。,TRACE,宏每次最多可以發(fā)送,512,個字符。如果你通過格

23、式化命令調(diào)用,TRACE,宏,被展開后的格式化命令的字符串總長度不能超過,512,,包括結尾的,NULL,字符。超出了這個限制就會引起,ASSERT,。注意:這個宏僅在,MFC,的調(diào)試版本中有效。在發(fā)行環(huán)境中,它不做任何操作。,示例,/ TRACE,的例子,int,i = 1;char,sz, = one;TRACE( Integer = %d, String = %,sn, i,sz,);/ output,:,Integer = 1, String = one,與,TRACE,類似,是一組跟蹤宏,可以用它們來產(chǎn)生調(diào)試輸出。這組宏包括:,TRACE0,接收一個格式字符串,可以用于將簡單的文本消

24、息轉儲到,afxDump,。,TRACE1,接收一個格式字符串和一個參數(shù)(一個要被轉儲到,afxDump,的變量)。,TRACE2,接收一個格式字符串和兩個參數(shù)(兩個要被轉儲到,afxDump,的變量)。,TRACE3,接收一個格式字符串和三個參數(shù)(三個要被轉儲到,afxDump,的變量)。,注意:這組宏僅在,MFC,的調(diào)試版本中有效。,示例,/ TRACE0,的例子,TRACE0( Start Dump of,MyClass,members: );,/ TRACE1,的例子,int,i = 1;TRACE1( Integer = %,dn, i );/ output,:,Integer = 1,/ TRACE2,的例子,int,i = 1;char,sz, = one;TRACE2( Integer = %d, String = %,sn, i,sz,);/,輸出:,Integer = 1, String = one,上機,P35,例,2-3,寫報告,P47,例,2-5,作業(yè):,P48 1,、,2,、,3,

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關資源

更多
正為您匹配相似的精品文檔
關于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!