MFC視圖結構課件_第1頁
MFC視圖結構課件_第2頁
MFC視圖結構課件_第3頁
MFC視圖結構課件_第4頁
MFC視圖結構課件_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

MFC文檔視圖結構MFC文檔視圖結構1一、文檔視結構概述思考:一個排序小程序的編寫過程,框架?應用層、顯示層、存儲層Observer模式文檔視結構是程序框架中應用層(數據處理層)與數據顯示層之間的一種數據交換關系。其主要思想是設計模式中的Observer模式。把數據處理和顯示有機分離,合理交互。在MFC中,則更多代表了一種程序框架模式。一、文檔視結構概述思考:一個排序小程序的編寫過程,框架?2MFC庫支持:SingleDocumentInterfaceMultiple-DocumentInterface一、文檔視結構概述MFC庫支持:一、文檔視結構概述3SDI和MDI主要差別(用戶的角度)SDI的應用程序只有一個窗口,每次只能讀寫一個文件或文檔。例如:Windows的notepadMDI的應用程序每次可以讀寫多個文件或文檔,可以同時對多個文檔進行操作,可以有多個子窗口。例如:Windows的Word一、文檔視結構概述SDI和MDI主要差別(用戶的角度)一、文檔視結構概述4SDI和MDI主要差別(程序員角度)SDI不需要生成CChildFrame類SDI應用程序的CMainFrame類的基類為CFrameWndMDI應用程序的CMainFrame類的基類為CMDIFrameWnd一、文檔視結構概述SDI和MDI主要差別(程序員角度)一、文檔視結構概述5二、基于文檔視結構的程序框架構成文檔處理類應用層負責應用程序的數據處理、管理和存儲中心。視圖顯示類顯示層從文檔類中取數據、顯示數據給用戶;接受用戶對文檔中數據的編輯和修改,并反饋給文檔類;框架管理類獨立界面管理工作,為應用程序的用戶界面提供框架窗口,它是應用程序的主窗口,負責管理其包容的窗口。應用程序類管理應用程序本身,負責和OS進行交互(獲取或發(fā)送消息等)二、基于文檔視結構的程序框架構成文檔處理類應用層6二、基于文檔視結構的程序框架構成文檔classCDocument;視圖classCView;框架類classCFrameWnd;//standardSDIMainFrameclassCMDIFrameWnd;//stardardMDIMainFrameclassCMDIChildWnd;//standardMDIchildFrame應用程序類classWinApp二、基于文檔視結構的程序框架構成文檔7二、基于文檔視結構的程序框架構成SDICDocumentCViewCWinAppCMainFrame--派生自CFrameWnd二、基于文檔視結構的程序框架構成SDI8二、基于文檔視結構的程序框架構成MDICDocumentCViewCWinAppCMainFrame--派生自CFrameWnd:主框架類CChildFrame—派生自CMDIChildWnd:子框架類二、基于文檔視結構的程序框架構成MDI9三、文檔視結構的運行機制(方式)1)視圖類調用GetDocument成員函數獲得相關聯的文檔對象指針,從文檔中讀取數據。2)視圖把數據顯示在屏幕上用戶交互數據修改。3)視圖將經過修改的數據傳遞給文檔對象,進行數據更新。三、文檔視結構的運行機制(方式)1)視圖類調用GetDocu10四、文檔視結構中各類的重要函數幾個重要的函數CView類的OnInitialUpdateCView類的OnDrawCView類的GetDocumentCDocument類的UpdateAllViewsCView類的OnUpdate四、文檔視結構中各類的重要函數幾個重要的函數11CView類::OnInitialUpdate當視圖第一次與一個文檔相關聯,在視圖尚未顯示前,調用該函數。CView基類中的成員函數OnInitialUpdate()的作用就是調用OnUpdate()函數。可以用派生類的OnInitialUpdate()函數對視圖對象進行初始化。當應用程序啟動時,應用程序框架調用了OnCreate()函數之后,會立刻調用OnInitialUpdate()函數。四、文檔視結構中各類的重要函數CView類::OnInitialUpdate四、文檔視結構12CView::OnDraw應用程序幾乎所有的繪制工作都是在視圖類的OnDraw()函數中完成的。每次當視窗被重新繪制時,應用程序框架都要調用函數OnDraw()。當用戶改變了窗口尺寸,或者窗口恢復了以前被遮蓋的部分,或者當應用程序改變了窗口的數據時,窗口都需要被重新繪制。視圖類所繼承的Invalidate或InvalidateRect成員調用后會觸發(fā)對函數OnDraw的調用。四、文檔視結構中各類的重要函數CView::OnDraw四、文檔視結構中各類的重要函數13CView::GetDocument一個視圖對象只有一個與之相聯系的文檔對象,CView及其派生類只需調用GetDocument()函數就可以取得CDocument類的對象指針,從而用此指針來訪問文檔類中的所有可見的數據和文檔類公有成員函數。四、文檔視結構中各類的重要函數CView::GetDocument一個視圖對象只有一個與之14CDocument::UpdateAllViews一個文檔對象可以有多個視圖對象與之對應,所以當文檔數據發(fā)生了改變,則必須要通知所有的視圖對象,以便它們能對所顯示的數據進行相應的更新。UpdateAllViews()函數調用每個視圖的成員函數OnUpdate()對相應視圖進行更新。四、文檔視結構中各類的重要函數CDocument::UpdateAllViews四、文檔視15CView::OnUpdate當應用程序調用了CDocument類的UpdateAllViews()函數時,應用程序框架就會相應的調用此函數。通常在派生視圖類中的OnUpdate()函數要對文檔進行訪問,讀取文檔的數據,然后再對視圖的數據成員或控制進行更新,以便反映出文檔的變化。四、文檔視結構中各類的重要函數CView::OnUpdate四、文檔視結構中各類的重要函數16一個簡單的數據分析軟件需求:1、處理數據源格式用戶提供一個數據文件,文件第一行有兩個數據,分別表示數據文件每行有多少個數據(列)以及數據文件共有多少行。文件從第二行開始表示具體的數據,數據之間以一個空格隔開,數據均在0~255之間。

一個簡單的數據分析軟件需求:17MFC視圖結構課件18一個簡單的數據分析軟件2、功能要求能夠讀入一個數據文件能夠對該數據文件中的數據進行統(tǒng)計分析,前期只需要計算出這些數據的直方圖,并在軟件中以二維圖形的方式顯示出來;能夠對每個數據以該數據值為顏色,以該數據行、列為坐標在屏幕上畫出該數據點。

一個簡單的數據分析軟件2、功能要求19一個簡單的數據分析軟件—關鍵問題1、文件讀取文件讀取采用C++中的文件流技術進行數據文件中的數據讀取。ifstreamdataFile(“1.dat”,ios::in|ios::nocreate);dataFile>>a;dataFile>>b;其他方法CFile、CArchive串行化等一個簡單的數據分析軟件—關鍵問題1、文件讀取20一個簡單的數據分析軟件2、直方圖計算算法假如有一個有16個數的數列:1113214532455433,這些數都在0~5之間。數0,1,2,3,4,5在這個數列中出現的次數就是這個數列的統(tǒng)計直方圖。思考:(1)這些數出現的概率呢?(2)計算機如何實現求直方圖IntData[16]存數列;hist[5]存0~5每個整數出現的次數。實現:出現一個數i,就對hist[i]加1 For(intI=0;I<16;I++) Hist[data[I]]++;一個簡單的數據分析軟件2、直方圖計算算法21一個簡單的數據分析軟件—關鍵問題3、結果輸出直方圖的顯示以直方圖數據中的每個元素為偏移畫線即可。比如:從(100,100)開始畫hist[5]的直方圖。數據文件的圖形顯示以數據文件中每個數據的值填充RGB顏色,以數據在數據文件中的行列值為坐標,在屏幕上利用SetPixel函數畫點就可以了。一個簡單的數據分析軟件—關鍵問題3、結果輸出22一個簡單的數據分析軟件—關鍵問題5、數據處理位置與時機數據處理(數據讀取、數據分析)在Doc里面數據顯示(直方圖、數據繪制)在View里面問題1:Doc和View之間如何通信?CDocument的UpdateAllViews函數推View的GetDocument()函數拉自定義消息問題2:什么時間進行數據處理、什么時間進行數據顯示?即數據分析流程數據載入處理顯示一個簡單的數據分析軟件—關鍵問題5、數據處理位置與時機23一個簡單的數據分析軟件—實現實做!一個簡單的數據分析軟件—實現實做!24一個簡單的數據分析軟件—擴展擴展:求數據的平均值、方差、標準差、梯度等?數據的繪制速度很慢且獨占應用程序,給重繪也帶來了沖擊。可否進行改進?數據的直方圖繪制可不可以做在一個非模態(tài)對話框中?直方圖可不可更美觀一些,比如帶坐標對數據進行反轉,即反色圖像。一個簡單的數據分析軟件—擴展擴展:25附錄從該對象如何訪問其他對象全局函數調用全局函數AfxGetApp可以得到CWinApp應用類指針應用程序類AfxGetApp()->m_pMainWnd為框架窗口指針;文檔類調用CDocument::GetFirstViewPosition,CDocument::GetNextView來遍歷所有和文檔關聯的視圖視圖類調用CView::GetDocument得到對應的文檔指針調用CView::GetParentFrame獲取框架窗口框架窗口調用CFrameWnd::GetActiveView獲取當前得到當前活動視圖指針調用CFrameWnd::GetActiveDocument獲取附加到當前視圖的文檔指針附錄從該對象如何訪問其他對象全局函數調用全局函數AfxGet26MFC文檔視圖結構MFC文檔視圖結構27一、文檔視結構概述思考:一個排序小程序的編寫過程,框架?應用層、顯示層、存儲層Observer模式文檔視結構是程序框架中應用層(數據處理層)與數據顯示層之間的一種數據交換關系。其主要思想是設計模式中的Observer模式。把數據處理和顯示有機分離,合理交互。在MFC中,則更多代表了一種程序框架模式。一、文檔視結構概述思考:一個排序小程序的編寫過程,框架?28MFC庫支持:SingleDocumentInterfaceMultiple-DocumentInterface一、文檔視結構概述MFC庫支持:一、文檔視結構概述29SDI和MDI主要差別(用戶的角度)SDI的應用程序只有一個窗口,每次只能讀寫一個文件或文檔。例如:Windows的notepadMDI的應用程序每次可以讀寫多個文件或文檔,可以同時對多個文檔進行操作,可以有多個子窗口。例如:Windows的Word一、文檔視結構概述SDI和MDI主要差別(用戶的角度)一、文檔視結構概述30SDI和MDI主要差別(程序員角度)SDI不需要生成CChildFrame類SDI應用程序的CMainFrame類的基類為CFrameWndMDI應用程序的CMainFrame類的基類為CMDIFrameWnd一、文檔視結構概述SDI和MDI主要差別(程序員角度)一、文檔視結構概述31二、基于文檔視結構的程序框架構成文檔處理類應用層負責應用程序的數據處理、管理和存儲中心。視圖顯示類顯示層從文檔類中取數據、顯示數據給用戶;接受用戶對文檔中數據的編輯和修改,并反饋給文檔類;框架管理類獨立界面管理工作,為應用程序的用戶界面提供框架窗口,它是應用程序的主窗口,負責管理其包容的窗口。應用程序類管理應用程序本身,負責和OS進行交互(獲取或發(fā)送消息等)二、基于文檔視結構的程序框架構成文檔處理類應用層32二、基于文檔視結構的程序框架構成文檔classCDocument;視圖classCView;框架類classCFrameWnd;//standardSDIMainFrameclassCMDIFrameWnd;//stardardMDIMainFrameclassCMDIChildWnd;//standardMDIchildFrame應用程序類classWinApp二、基于文檔視結構的程序框架構成文檔33二、基于文檔視結構的程序框架構成SDICDocumentCViewCWinAppCMainFrame--派生自CFrameWnd二、基于文檔視結構的程序框架構成SDI34二、基于文檔視結構的程序框架構成MDICDocumentCViewCWinAppCMainFrame--派生自CFrameWnd:主框架類CChildFrame—派生自CMDIChildWnd:子框架類二、基于文檔視結構的程序框架構成MDI35三、文檔視結構的運行機制(方式)1)視圖類調用GetDocument成員函數獲得相關聯的文檔對象指針,從文檔中讀取數據。2)視圖把數據顯示在屏幕上用戶交互數據修改。3)視圖將經過修改的數據傳遞給文檔對象,進行數據更新。三、文檔視結構的運行機制(方式)1)視圖類調用GetDocu36四、文檔視結構中各類的重要函數幾個重要的函數CView類的OnInitialUpdateCView類的OnDrawCView類的GetDocumentCDocument類的UpdateAllViewsCView類的OnUpdate四、文檔視結構中各類的重要函數幾個重要的函數37CView類::OnInitialUpdate當視圖第一次與一個文檔相關聯,在視圖尚未顯示前,調用該函數。CView基類中的成員函數OnInitialUpdate()的作用就是調用OnUpdate()函數??梢杂门缮惖腛nInitialUpdate()函數對視圖對象進行初始化。當應用程序啟動時,應用程序框架調用了OnCreate()函數之后,會立刻調用OnInitialUpdate()函數。四、文檔視結構中各類的重要函數CView類::OnInitialUpdate四、文檔視結構38CView::OnDraw應用程序幾乎所有的繪制工作都是在視圖類的OnDraw()函數中完成的。每次當視窗被重新繪制時,應用程序框架都要調用函數OnDraw()。當用戶改變了窗口尺寸,或者窗口恢復了以前被遮蓋的部分,或者當應用程序改變了窗口的數據時,窗口都需要被重新繪制。視圖類所繼承的Invalidate或InvalidateRect成員調用后會觸發(fā)對函數OnDraw的調用。四、文檔視結構中各類的重要函數CView::OnDraw四、文檔視結構中各類的重要函數39CView::GetDocument一個視圖對象只有一個與之相聯系的文檔對象,CView及其派生類只需調用GetDocument()函數就可以取得CDocument類的對象指針,從而用此指針來訪問文檔類中的所有可見的數據和文檔類公有成員函數。四、文檔視結構中各類的重要函數CView::GetDocument一個視圖對象只有一個與之40CDocument::UpdateAllViews一個文檔對象可以有多個視圖對象與之對應,所以當文檔數據發(fā)生了改變,則必須要通知所有的視圖對象,以便它們能對所顯示的數據進行相應的更新。UpdateAllViews()函數調用每個視圖的成員函數OnUpdate()對相應視圖進行更新。四、文檔視結構中各類的重要函數CDocument::UpdateAllViews四、文檔視41CView::OnUpdate當應用程序調用了CDocument類的UpdateAllViews()函數時,應用程序框架就會相應的調用此函數。通常在派生視圖類中的OnUpdate()函數要對文檔進行訪問,讀取文檔的數據,然后再對視圖的數據成員或控制進行更新,以便反映出文檔的變化。四、文檔視結構中各類的重要函數CView::OnUpdate四、文檔視結構中各類的重要函數42一個簡單的數據分析軟件需求:1、處理數據源格式用戶提供一個數據文件,文件第一行有兩個數據,分別表示數據文件每行有多少個數據(列)以及數據文件共有多少行。文件從第二行開始表示具體的數據,數據之間以一個空格隔開,數據均在0~255之間。

一個簡單的數據分析軟件需求:43MFC視圖結構課件44一個簡單的數據分析軟件2、功能要求能夠讀入一個數據文件能夠對該數據文件中的數據進行統(tǒng)計分析,前期只需要計算出這些數據的直方圖,并在軟件中以二維圖形的方式顯示出來;能夠對每個數據以該數據值為顏色,以該數據行、列為坐標在屏幕上畫出該數據點。

一個簡單的數據分析軟件2、功能要求45一個簡單的數據分析軟件—關鍵問題1、文件讀取文件讀取采用C++中的文件流技術進行數據文件中的數據讀取。ifstreamdataFile(“1.dat”,ios::in|ios::nocreate);dataFile>>a;dataFile>>b;其他方法CFile、CArchive串行化等一個簡單的數據分析軟件—關鍵問題1、文件讀取46一個簡單的數據分析軟件2、直方圖計算算法假如有一個有16個數的數列:1113214532455433,這些數都在0~5之間。數0,1,2,3,4,5在這個數列中出現的次數就是這個數列的統(tǒng)計直方圖。思考:(1)這些數出現的概率呢?(2)計算機如何實現求直方圖IntData[16]存數列;hist[5]存0~5每個整數出現的次數。實現:出現一個數i,就對hist[i]加1 For(intI=0;I<16;I++) Hist[data[I]]++;一個簡單的數據分析軟件2、直方圖計算算法47一個簡單的數據分析軟件—關鍵問題3、結果輸出直方圖的顯示以直方圖數據中的每個元素為偏移畫線即可。比如:從(100,100)開始

溫馨提示

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

最新文檔

評論

0/150

提交評論