資源描述:
《第6章 MFC文檔視圖》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、第6章MFC文檔視圖本章目標(biāo)熟悉文檔、視圖對象的創(chuàng)建過程熟悉文檔/視圖結(jié)構(gòu)的消息傳遞過程熟悉程序框架中的主要類及相互關(guān)系熟悉文檔類、視圖類核心函數(shù)及作用熟悉新建、保存和打開的實(shí)現(xiàn)的原理掌握文檔/視圖程序的界面設(shè)計(jì)方法,包括,菜單欄、工具欄、狀態(tài)欄掌握文檔/視圖程序消息處理的方法掌握文檔/視圖的文本編程方法,包括插入符創(chuàng)建、顯示掌握通過串行化的方法保存加載對象2文檔/視圖框架文檔/視圖結(jié)構(gòu)是MFC中結(jié)構(gòu)最復(fù)雜、體系最龐大而又最富有特色的部分。在文檔/視圖結(jié)構(gòu)里,文檔是一個(gè)應(yīng)用程序基本數(shù)據(jù)元素的集合,它構(gòu)成應(yīng)用程序所使用的數(shù)據(jù)單元;視圖是應(yīng)用程序數(shù)據(jù)顯示部分。使用MFC的程序向?qū)ВˋppW
2、izard)可以方便的創(chuàng)建文檔/視圖框架程序。3文檔/視圖框架—文檔/視圖結(jié)構(gòu)概述文檔和視圖的關(guān)系4文檔/視圖框架—文檔/視圖結(jié)構(gòu)概述使用文檔/視圖結(jié)構(gòu)的意義:將數(shù)據(jù)操作、數(shù)據(jù)顯示和用戶界面分離開。這是一種“分而治之”的思想,這種思想使得模塊劃分更加合理、模塊獨(dú)立性更強(qiáng)。MFC在文檔/視圖結(jié)構(gòu)上提供了許多標(biāo)準(zhǔn)操作。如新建文件、打開文件、保存文件、打印等操作,它們被框架自動完成,減輕了程序員的工作量。5文檔/視圖框架—文檔/視圖結(jié)構(gòu)概述不宜采用文檔/視圖結(jié)構(gòu)的情況:不是面向數(shù)據(jù)的或數(shù)據(jù)量很少的應(yīng)用程序。典型的是一些工具程序,例如磁盤掃描程序、時(shí)鐘程序。不使用標(biāo)準(zhǔn)的窗口用戶界面的程序。比如
3、游戲程序。6文檔/視圖框架—文檔/視圖結(jié)構(gòu)概述單文檔與多文檔:SDI程序中,用戶在同一時(shí)刻只能操作一個(gè)文檔。典型應(yīng)用為Windows下的Notepad記事本程序。在這些應(yīng)用中,打開新文檔時(shí)需要關(guān)閉當(dāng)前已打開的活動文檔。MDI程序中,允許用戶同時(shí)操作多個(gè)文檔。如VS2008就是多文檔程序。在MDI程序中,用戶可以通過切換活動窗口激活相應(yīng)的文檔進(jìn)行操作。7文檔/視圖框架—單文檔主要類單文檔應(yīng)用程序框架中,主要包含5個(gè)類:SDICWinApp(應(yīng)用程序類)CFrameWnd(框架窗口類)CView(視圖類)CDocument(文檔類)CDocTemplate(類文檔模板)8文檔/視圖框架—單
4、文檔主要類單文檔程序框架中的類對象之間的關(guān)系:9文檔/視圖框架—單文檔主要類SDI框架程序中各對象之間的訪問:成員函數(shù)函數(shù)說明文檔對象調(diào)用GetFirstViewPosition()函數(shù)和GetNextView()函數(shù)訪問文檔視圖的列表調(diào)用GetDocTemplate()函數(shù)獲取文檔模板指針,以訪問文檔模板視圖對象調(diào)用GetDocument()函數(shù)獲得同視圖關(guān)聯(lián)的文檔指針,以訪問文檔調(diào)用GetParentFrame()函數(shù)獲取框架窗口指針,以訪問框架窗口框架窗口對象調(diào)用GetActiveView()函數(shù)獲取活動的視圖指針,以訪問視圖調(diào)用GetActiveDocument()函數(shù)獲取同當(dāng)
5、前視圖相關(guān)聯(lián)的文檔,以訪問文檔應(yīng)用程序?qū)ο笤诔绦虻娜魏挝恢?,調(diào)用全局函數(shù)AfxGetApp()可以獲得CWinApp應(yīng)用程序類指針,而通過AfxGetApp()->m_pMainWnd則可以獲得框架窗口指針10文檔/視圖框架—文檔視圖對象的創(chuàng)建過程......//注冊應(yīng)用程序的文檔模板。//文檔模板將用作文檔、框架窗口和視圖之間的連接CSingleDocTemplate*pDocTemplate;pDocTemplate=newCSingleDocTemplate(IDR_MAINFRAME,RUNTIME_CLASS(CMytestDoc),RUNTIME_CLASS(CMainFr
6、ame),//主SDI框架窗口RUNTIME_CLASS(CMytestView));if(!pDocTemplate)returnFALSE;AddDocTemplate(pDocTemplate);//分析標(biāo)準(zhǔn)外殼命令、DDE、打開文件操作的命令行......//根據(jù)命令行中的信息啟動程序......//唯一的一個(gè)窗口已初始化,因此顯示它并對其進(jìn)行更新......11文檔/視圖框架—文檔視圖核心函數(shù)文檔類核心函數(shù):成員函數(shù)函數(shù)說明GetFirstViewPosition()這兩個(gè)函數(shù)配合使用,訪問同文檔關(guān)聯(lián)的視圖列表。GetNextView()GetPathName()獲得文檔的文
7、件名和路徑,若文檔未命名則返回空字符串GetTitle()獲得文檔的標(biāo)題,若文檔未命名則返回空字符串IsModified()若文檔未保存數(shù)據(jù),則返回非0,否則返回0SetModifiedFlags()設(shè)置或清除文檔的修改標(biāo)志,如果設(shè)置了修改標(biāo)記,則系統(tǒng)自動實(shí)現(xiàn)關(guān)閉文檔時(shí),提示用戶是否保存對文檔的修改。UpdateAllViews()文檔對應(yīng)多個(gè)視圖時(shí),更新所有視圖,它是通過調(diào)用每個(gè)視圖類的OnUpdate()函數(shù)來更新所有當(dāng)前文檔關(guān)聯(lián)的視圖*O