資源描述:
《《文檔視圖框架》PPT課件》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、文檔/視圖框架基本內(nèi)容文檔/視圖框架序列化CFile不適用的情況CCmdTargetCWinThreadCWinAppCWndCFrameWndCObject主要負(fù)責(zé)初始化、運(yùn)行和結(jié)束應(yīng)用程序的執(zhí)行。負(fù)責(zé)管理操作數(shù)據(jù)及顯示,并接收用戶(hù)的輸入。結(jié)論:CFrameWnd派生類(lèi)的負(fù)擔(dān)過(guò)重。一、文檔/視圖框架也是一種MVC架構(gòu)Model——DocumentView——ViewController——DocumentTemplate將數(shù)據(jù)操作和數(shù)據(jù)顯示、用戶(hù)界面分離程序每打開(kāi)一個(gè)文件時(shí),創(chuàng)建3個(gè)對(duì)象:一個(gè)文檔對(duì)象一個(gè)視圖對(duì)象一個(gè)窗口框架對(duì)象由文檔模板對(duì)象
2、負(fù)責(zé)管理文檔、視圖和框架窗體對(duì)象。CDocument::UpdateAllViews(…)CDocument::Serialize()該函數(shù)一般需要在文檔子類(lèi)中重載voidSXXXDoc::Serialize(CArchive&ar){if(ar.IsStoring()){//向文件中寫(xiě)數(shù)據(jù)(ar<<)}else{//從文件中讀數(shù)據(jù)(ar>>)}}文檔類(lèi)的常用成員函數(shù)視窗類(lèi)中的OnDraw成員函數(shù)每次當(dāng)視窗需要被重新繪制時(shí),應(yīng)用程序框架就要調(diào)用OnDraw函數(shù)。驅(qū)使程序調(diào)用OnDraw的兩個(gè)途徑:用戶(hù)改變窗口的尺寸;窗口恢復(fù)先前被遮蓋的部分;應(yīng)
3、用程序改變了窗口數(shù)據(jù);程序中調(diào)用Invalidate(或者InvalidateRect),通知Windows調(diào)用OnDraw函數(shù)常用視圖類(lèi)CScrollView:提供自動(dòng)滾動(dòng)或縮放功能。CFormView:由對(duì)話(huà)框模板創(chuàng)建,并具有和對(duì)話(huà)框一樣的設(shè)計(jì)方法。CRecordView:提供表單視圖直接與ODBC記錄集對(duì)象關(guān)聯(lián);和所有的表單視圖一樣,CRecordView也是基于對(duì)話(huà)框模板設(shè)計(jì)的。CEditView:提供包含編輯控件的視圖CRichEditView:提供包含復(fù)合編輯控件的視圖CListView:提供包含列表控件的視圖。CTreeView:
4、提供包含樹(shù)狀控件的視圖。相互引用關(guān)系CDocument有一個(gè)成員變量CDocTemplate*m_pDocTemplate,用于回指其DocumentTemplate;另有一個(gè)成員變量CPtrListm_viewList,表示它可以同時(shí)維護(hù)一系列的Views。CFrameWnd有一個(gè)成員變量CView*m_pViewActive,指向目前正作用中的View。亦可用CFrameWnd::GetActiveView()獲得視圖對(duì)象指針CFrameWnd::GetActiveDocument()獲得當(dāng)前活動(dòng)的文檔對(duì)象指針。CView有一個(gè)成員變量CD
5、ocument*m_pDocument,指向相關(guān)的文檔Document。CWnd::GetParentFrame可實(shí)現(xiàn)從視圖類(lèi)中獲取主框架指針。文檔視圖相互作用的典型實(shí)例切分窗口靜態(tài)切分:窗口第一次被創(chuàng)建時(shí),窗格就已經(jīng)被切分好了。最大窗格數(shù)目為16×16。動(dòng)態(tài)切分:允許用戶(hù)在任何時(shí)候?qū)Υ翱谶M(jìn)行切分。最大窗格數(shù)目為2×2。舉例:Graph一檔多視舉例:Rect(1)切分窗口類(lèi)BOOLCreate(CWnd*pParentWnd,intnMaxRows,intnMaxCols,SIZEsizeMin,CCreateContext*pContext,
6、DWORDdwStyle=WS_CHILD
7、WS_VISIBLE
8、WS_HSCROLL
9、WS_VSCROLL
10、SPLS_DYNAMIC_SPLIT,UINTnID=AFX_IDW_PANE_FIRST);BOOLCreateStatic(CWnd*pParentWnd,intnRows,intnCols,DWORDdwStyle=WS_CHILD
11、WS_VISIBLE,UINTnID=AFX_IDW_PANE_FIRST);(2)一檔多視MFC對(duì)于“一檔多視”提供下列三個(gè)模式:1)在各自MDI文檔窗口中包含同一個(gè)視圖類(lèi)的多個(gè)視圖對(duì)象。2)在同一
12、個(gè)文檔窗口中包含同一個(gè)視圖類(lèi)的多個(gè)視圖對(duì)象(即切分窗口運(yùn)用于SDI)3)在單獨(dú)一個(gè)文檔窗口中包含不同視圖類(lèi)的多個(gè)視圖對(duì)象。(例如,同一個(gè)文檔可同時(shí)有文字顯示方式及圖形顯示方式的視圖)。二、永久性對(duì)象與序列化內(nèi)存中的對(duì)象可以被以文件的形式存儲(chǔ)在永久性存儲(chǔ)介質(zhì)中,而當(dāng)應(yīng)用程序把它再?gòu)挠谰眯源鎯?chǔ)介質(zhì)讀入后,如果該對(duì)象在內(nèi)存中能恢復(fù)為原來(lái)的狀態(tài),那么這種對(duì)象就叫做永久性對(duì)象。在面向?qū)ο罄碚撝?,能使?duì)象成為永久性對(duì)象的機(jī)制叫做序列化。磁盤(pán)對(duì)象在內(nèi)存中的存儲(chǔ)格式轉(zhuǎn)換為文件的格式內(nèi)存中的對(duì)象把文件的格式恢復(fù)為內(nèi)存中的存儲(chǔ)格式所謂永久性對(duì)象,就是這種對(duì)象具有這
13、樣一種能力:它提供了一套描述自身的信息(例如對(duì)象的類(lèi)名稱(chēng)及數(shù)據(jù)在內(nèi)存中的存儲(chǔ)格式等)。當(dāng)應(yīng)用程序存儲(chǔ)對(duì)象時(shí),應(yīng)用程序可以把這些信息與對(duì)象的數(shù)據(jù)成員一起