![win5-6MFC視圖結構課件_第1頁](http://file4.renrendoc.com/view9/M03/05/17/wKhkGWdDDyuAJcoIAACAYSgG5sc146.jpg)
![win5-6MFC視圖結構課件_第2頁](http://file4.renrendoc.com/view9/M03/05/17/wKhkGWdDDyuAJcoIAACAYSgG5sc1462.jpg)
![win5-6MFC視圖結構課件_第3頁](http://file4.renrendoc.com/view9/M03/05/17/wKhkGWdDDyuAJcoIAACAYSgG5sc1463.jpg)
![win5-6MFC視圖結構課件_第4頁](http://file4.renrendoc.com/view9/M03/05/17/wKhkGWdDDyuAJcoIAACAYSgG5sc1464.jpg)
![win5-6MFC視圖結構課件_第5頁](http://file4.renrendoc.com/view9/M03/05/17/wKhkGWdDDyuAJcoIAACAYSgG5sc1465.jpg)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
MFC文檔視圖結構一、文檔視結構概述思考:一個排序小程序的編寫過程,框架?應用層、顯示層、存儲層 Observer模式文檔視結構是程序框架中應用層(數(shù)據(jù)處理層)與數(shù)據(jù)顯示層之間的一種數(shù)據(jù)交換關系。其主要思想是設計模式中的Observer模式。把數(shù)據(jù)處理和顯示有機分離,合理交互。在MFC中,則更多代表了一種程序框架模式。一、文檔視結構概述MFC庫支持:SingleDocumentInterfaceMultiple-DocumentInterface一、文檔視結構概述SDI和MDI主要差別(用戶的角度) SDI的應用程序只有一個窗口,每次只能讀寫一個文件或文檔。例如:Windows的notepad MDI的應用程序每次可以讀寫多個文件或文檔,可以同時對多個文檔進行操作,可以有多個子窗口。例如:Windows的Word一、文檔視結構概述SDI和MDI主要差別(程序員角度)SDI不需要生成CChildFrame類SDI應用程序的CMainFrame類的基類為CFrameWnd
MDI應用程序的CMainFrame類的基類為CMDIFrameWndDOCUMENT/VIEW架構(1)·MFC引入了"文檔/視圖"結構的概念,理解這個結構是編寫基于MFC編寫復雜VisualC++程序的關鍵。DOCUMENT/VIEW架構(2)·在此模型中,MFC文檔對象將數(shù)據(jù)讀入或?qū)懭胗谰么鎯^(qū)。該文檔還可能提供到數(shù)據(jù)所駐留的任何位置(如在數(shù)據(jù)庫中)的接口。一個單獨的視圖對象可管理數(shù)據(jù)顯示,包括從在窗口中呈現(xiàn)數(shù)據(jù)到用戶選擇和數(shù)據(jù)編輯。該視圖從文檔獲取顯示數(shù)據(jù),并將任何數(shù)據(jù)更改傳遞回文檔。MVC架構(1)·MVC(Model-View-Controller,模型—視圖—控制器模式)是軟件工程中的一種軟件架構模式。它把軟件系統(tǒng)分為三個基本部分:模型(Model),視圖(View)和控制器(Controller)。MVC架構(2)其目的是實現(xiàn)一種動態(tài)的程式設計,使后續(xù)對程序的修改和擴展簡化,并且使程序某一部分的重復利用成為可能。除此之外此模式通過對復雜度的簡化使程序結構更加直觀。軟件系統(tǒng)通過對自身基本部份分離的同時也賦予了各個基本部分應有的功能。專業(yè)人員可以通過自身的專長分組:*控制器-負責轉(zhuǎn)發(fā)請求,對請求進行處理。*視圖-界面設計人員進行圖形界面設計。 *模型-程序員編寫程序應有的功能(實現(xiàn)算法等等)、數(shù)據(jù)庫專家進行數(shù)據(jù)管理和數(shù)據(jù)庫設計(可以實現(xiàn)具體的功能)。MVC和DOCUMENT/VIEW的關系Document/View架構是MVC的一種變體,因為在幾種GUI平臺中,窗口顯示和事件處理是交織在一起的。MFCDocument/View架構是 期對于MVC的實現(xiàn),MFC將程式分成View以及Document兩大類,其中的Document對應MVC中的Model,View相當于MVC中的View+Controller。DOCUMENT/VIEW的優(yōu)勢在需要同一文檔的多個視圖時,例如同時需要電子數(shù)據(jù)表格和圖表視圖。文檔/視圖模型使一個單獨的視圖對象得以表示每個數(shù)據(jù)視圖,而對所有視圖通用的代碼(例如計算引擎)可以駐留在文檔中。文檔還承擔在每次數(shù)據(jù)更改時更新所有視圖的任務。MFC文檔/視圖結構使支持多視圖、多文檔類型、拆分窗口和其他有價值的用戶界面功能變得容易。二、基于文檔視結構的程序框架構成//standard
SDI
Main
Frame//stardard
MDI
Main
Frame//
standard
MDI
child
Frame文檔class
CDocument;視圖class
CView;框架類class
CFrameWnd;class
CMDIFrameWnd;class
CMDIChildWnd;應用程序類class
WinApp二、基于文檔視結構的程序框架構成SDICDocumentCViewCWinAppCMainFrame--派生自CFrameWnd二、基于文檔視結構的程序框架構成MDICDocumentCViewCWinAppCMainFrame--派生自CFrameWnd:主框架類CChildFrame—派生自CMDIChildWnd:子框架類三、文檔視結構的運行機制(方式)1)視圖類調(diào)用GetDocument成員函數(shù)獲得相關聯(lián)的文檔對象指針,從文檔中讀取數(shù)據(jù)。2)視圖把數(shù)據(jù)顯示在屏幕上 用戶交互 數(shù)據(jù)修改。3)視圖將經(jīng)過修改的數(shù)據(jù)傳遞給文檔對象,進行數(shù)據(jù)更新。CDOCTEMPLATE(1)CDocTemplate(或CSingleDocTemplate或CMultiDocTemplate)支持一個對象,該對象協(xié)調(diào)給定類型的一個或多個現(xiàn)有文檔并對創(chuàng)建該類型的正確文檔、視圖和框架窗口對象進行管理。CDocTemplate是一個抽象基類,它定義了文檔模板的基本處理函數(shù)接口。對一個單文檔界面程序,需使用單文檔模板類CSingleDocTemplate,而對于一個多文檔界面程序,需使用多文檔模板類CMultipleDocTemplate。CDOCTEMPLATE(2)·文檔模板掛接了文檔、視圖和框架窗口,使得它們得以互相關聯(lián)。通過文檔模板,程序確定了創(chuàng)建或打開一個文檔時,以什么樣的視圖和框架窗口來顯示。文檔模板依靠保存相互對應的文檔、視圖和框架窗口的CRuntimeClass對象指針來實現(xiàn)上述掛接,這就是文檔模板類中的成員變量m_pDocClass、m_pFrameClass、m_pViewClass的由來。CDOCUMENT(1)·CDocument(或COleDocument)類支持用于存儲或控制程序數(shù)據(jù)的對象,并為程序員定義的文檔類提供基本功能。在"文檔/視圖"架構的MFC程序中,文檔是一個CDocument派生對象,它負責存儲應用程序的數(shù)據(jù),并把這些信息提供給應用程序的其余部分。CDocument類對文檔的建立及歸檔提供支持并提供了應用程序用于控制其數(shù)據(jù)的接口。CDOCUMENT(2)文檔表示數(shù)據(jù)單元,用戶一般用“文件”菜單上的“打開”命令打開它,并用“文件”菜單上的“保存”命令保存它。一個文檔可以有多個視圖,每一個文檔都維護一個與之相關視圖的鏈表(CptrList類型的m_viewList實例)。CDocument::AddView將一個視圖連接到文檔上,并將視圖的文檔指針指向該文檔。文檔與視圖進行通信的方式是調(diào)用文檔類的UpdateAllViews函數(shù)。CVIEW(1)·CView(或它的許多派生類之一)為程序員定義的視圖類提供基本功能。視圖被附加到文檔并在文檔和用戶之間充當中介:視圖在屏幕上呈現(xiàn)文檔的圖像并將用戶輸入解釋為對文檔的操作。視圖還為打印和打印預覽呈現(xiàn)圖像。CVIEW(2)在MFC"文檔/視圖"架構中,CView類是所有視圖類的基類,它提供了用戶自定義視圖類的公共接口。在"文檔/視圖"架構中,文檔負責管理和維護數(shù)據(jù);而視圖類則負責如下工作:從文檔類中將文檔中的數(shù)據(jù)取出后顯示給用戶;接受用戶對文檔中數(shù)據(jù)的編輯和修改;將修改的結果反饋給文檔類,由文檔類將修改后的內(nèi)容保存到磁盤文件中。文檔負責了數(shù)據(jù)真正在永久介質(zhì)中的存儲和讀取工作,視圖呈現(xiàn)只是將文檔中的數(shù)據(jù)以某種形式向用戶呈現(xiàn),因此一個文檔可對應多個視圖。CVIEW(3)·CView類首先要維護文檔與視圖之間的關聯(lián),它通過CDocument*m_pDocument保護性成員變量記錄關聯(lián)文檔的指針,并提供CView::GetDocument接口函數(shù)以使得應用程序可得到與視圖關聯(lián)的文檔。而在CView類的析構函數(shù)中,需將對應文檔類視圖列表中的本視圖刪除。CVIEW(4)CView中地位最重要的函數(shù)是virtualvoidOnDraw(CDC*pDC)=0;CView是一個純虛基類。這個函數(shù)必須被重載,它通常執(zhí)行如下步驟:以GetDocument()函數(shù)獲得視圖對應文檔的指針;讀取對應文檔中的數(shù)據(jù);顯示這些數(shù)據(jù)。CVIEW(5)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)用。假如文檔中的數(shù)據(jù)發(fā)生了變化,必須通知所有鏈接到該文檔的視圖,這時候文檔類的UpdateAllViews函數(shù)需要被調(diào)用。CFRAMEWND(1)在MFC中,文檔是真正的數(shù)據(jù)載體,視圖是文檔的顯示界面,對應同一個文檔,可能存在多個視圖界面,我們需要另外一種東西來將這些界面管理起來,這個東西就是框架。CFrameWnd(或其變體之一)支持在文檔的一個或多個視圖周圍提供框架的對象。CFRAMEWND(2)MFC創(chuàng)造框架類的初衷在于:把界面管理工作獨立出來!框架窗口為應用程序的用戶界面提供結構框架,它是應用程序的主窗口,負責管理其包容的窗口。一個應用程序啟動時會創(chuàng)建一個最頂層的框架窗口。MFC提供兩種類型的框架窗口:單文檔窗口SDI和多文檔窗口MDI(你可以認為對話框是另一種框架窗口)。單文檔窗口一次只能打開一個文檔框架窗口,而多文檔窗口應用程序中可以打開多個文檔框架窗口,即子窗口(ChildWindow)。這些子窗口中的文檔可以為同種類型,也可以為不同類型。模板、文檔、視圖、框架的關系(1)文檔保留該文檔的視圖列表和指向創(chuàng)建該文檔的文檔模板的指針;文檔至少有一個相關聯(lián)的視圖,而視圖只能與一個文檔相關聯(lián)。(2)視圖保留指向其文檔的指針,并被包含在其父框架窗口中;(3)文檔框架窗口(即包含視圖的MDI子窗口)保留指向其當前活動視圖的指針;(4)文檔模板保留其已打開文檔的列表,維護框架窗口、文檔及視圖的映射;(5)應用程序保留其文檔模板的列表。消息流動機制在基于"文檔/視圖"架構的MFC程序中,用戶消息(鼠標、鍵盤輸入等)會先發(fā)往視圖,如果視圖未處理則會發(fā)往框架窗口。所以,一般來說,消息映射宜定義在視圖中。另外,如果一個應用同時擁有多個視圖而當前活動視圖沒有對消息進行處理則消息也會發(fā)往框架窗口。完整的WM_COMMAND消息的處理順序是"視圖――文檔――框架窗口――應用"。四、文檔視結構中各類的重要函數(shù)幾個重要的函數(shù)CView類的OnInitialUpdateCView類的OnDrawCView類的GetDocumentCDocument類的UpdateAllViewsCView類的OnUpdate四、文檔視結構中各類的重要函數(shù)CView類::OnInitialUpdate 當視圖第一次與一個文檔相關聯(lián),在視圖尚未顯示前,調(diào)用該函數(shù)。CView基類中的成員函數(shù)OnInitialUpdate()的作用就是調(diào)用OnUpdate()函數(shù)。 可以用派生類的OnInitialUpdate()函數(shù)對視圖對象進行初始化。當應用程序啟動時,應用程序框架調(diào)用了OnCreate()函數(shù)之后,會立刻調(diào)用OnInitialUpdate()函數(shù)。四、文檔視結構中各類的重要函數(shù)CView::OnDraw應用程序幾乎所有的繪制工作都是在視圖類的OnDraw()函數(shù)中完成的。每次當視窗被重新繪制時,應用程序框架都要調(diào)用函數(shù)OnDraw()。當用戶改變了窗口尺寸,或者窗口恢復了以前被遮蓋的部分,或者當應用程序改變了窗口的數(shù)據(jù)時,窗口都需要被重新繪制。視圖類所繼承的Invalidate或InvalidateRect成員調(diào)用后會觸發(fā)對函數(shù)OnDraw的調(diào)用。四、文檔視結構中各類的重要函數(shù)CView::GetDocument 一個視圖對象只有一個與之相聯(lián)系的文檔對象,CView及其派生類只需調(diào)用GetDocument()函數(shù)就可以取得CDocument類的對象指針,從而用此指針來訪問文檔類中的所有可見的數(shù)據(jù)和文檔類公有成員函數(shù)。四、文檔視結構中各類的重要函數(shù)CDocument::UpdateAllViews一個文檔對象可以有多個視圖對象與之對應,所以當文檔數(shù)據(jù)發(fā)生了改變,則必須要通知所有的視圖對象,以便它們能對所顯示的數(shù)據(jù)進行相應的更新。UpdateAllViews()函數(shù)調(diào)用每個視圖的成員函數(shù)OnUpdate()對相應視圖進行更新。四、文檔視結構中各類的重要函數(shù)CView::OnUpdate當應用程序調(diào)用了CDocument類的UpdateAllViews()函數(shù)時,應用程序框架就會相應的調(diào)用此函數(shù)。通常在派生視圖類中的OnUpdate()函數(shù)要對文檔進行訪問,讀取文檔的數(shù)據(jù),然后再對視圖的數(shù)據(jù)成員或控制進行更新,以便反映出文檔的變化。附錄從該對象如何訪問其他對象全局函數(shù)調(diào)用全局函數(shù)AfxGetApp可以得到CWinApp應用類指針應
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 服裝批發(fā)居間合同委托書
- 知識產(chǎn)權運營股權居間合同
- 專業(yè)運動器材銷售與推廣合同
- 弱電項目總結
- 游戲規(guī)則與操作指南發(fā)布平臺建設作業(yè)指導書
- 農(nóng)業(yè)產(chǎn)業(yè)鏈社會責任履行實戰(zhàn)指導書
- 三農(nóng)村集體資產(chǎn)管理方案
- 體育訓練與比賽作業(yè)指導書
- 安能轉(zhuǎn)讓合同
- 消防安全技術服務項目合同
- 部編人教版道德與法治三年級下冊全冊課件
- 《社會主義市場經(jīng)濟理論(第三版)》第一章社會主義市場經(jīng)濟基礎論
- 銀行授信盡職調(diào)查課件
- 河北省縣市鄉(xiāng)鎮(zhèn)衛(wèi)生院社區(qū)衛(wèi)生服務中心基本公共衛(wèi)生服務醫(yī)療機構名單目錄地址2415家
- (完整版)漢密爾頓焦慮量表(HAMA)
- 編外人員錄用審批表
- 地基轉(zhuǎn)讓合同范文
- 倪海廈《天紀》講義
- 員工住宿人身財產(chǎn)安全的承諾書范文
- 應用寫作第一章概述講義
- 側(cè)鉆井工藝技術簡介
評論
0/150
提交評論