資源描述:
《清華大學(xué)c++和vc++課件vc_3_16a》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、面向?qū)ο笈c可視化程序設(shè)計--VisualC++編程主講教師:唐龍教授(計算機科學(xué)與技術(shù)系)黃維通博士(計算機與信息管理中心)清華大學(xué)2001年2月6/12/20211第十六章文檔類與視圖類及其應(yīng)用6/12/20212內(nèi)容提要概述文檔類視圖類文檔模板類編寫單文檔應(yīng)用程序編寫多文檔應(yīng)用程序6/12/20213§16.1.概述6/12/202141.單文檔界面與多文檔界面VC的MFC庫支持三種不同的應(yīng)用程序單文檔界面(SDI)的應(yīng)用程序——只有一個窗口。多文檔界面(MDI)的應(yīng)用程序——有多個子窗口,同時
2、對多個文檔進行操作?;趯υ捒虻膽?yīng)用程序使用AppWizard創(chuàng)建SDI和MDI的應(yīng)用程序的過程幾乎完全一樣。主要差別:SDI應(yīng)用程序的CMainFrame類的基類為CFrameWnd,不生成CChildFrame類。MDI應(yīng)用程序的CMainFrame類的基類為CMDIFrameWnd,生成CChildFrame類。6/12/202152.視圖視圖是文檔的不同表現(xiàn)形式,每一個文檔可有多個視圖,但每個視圖只能對應(yīng)于一個確定的文檔。多文檔程序需要多個視圖,應(yīng)解決多個文檔的數(shù)據(jù)管理方法的問題。最初的文檔模
3、板只支持主窗口;每次打開一個新文檔時都調(diào)用CDocument的函數(shù)OnNewDocument,建立一個由CMDIChildWnd派生的新的MDI子窗口;這些窗口中保存著各種已打開的文檔,所有的細節(jié)都由MFC庫處理。6/12/202163.文檔-視圖結(jié)構(gòu)文檔-視圖結(jié)構(gòu)是基于文檔的應(yīng)用程序的基本框架。比傳統(tǒng)編程方法更有利于應(yīng)用程序。數(shù)據(jù)保存在文檔類的成員變量中,文檔負責(zé)對數(shù)據(jù)進行管理和維護:通過串行化過程,將數(shù)據(jù)保存到盤文件或數(shù)據(jù)庫;處理菜單、工具欄按鈕和加速鍵的WM_COMMAND消息,但不能處理其它的
4、Windows消息。注意:命令消息不同于一般Windows消息和控件通知消息,可被更多種對象處理,除了窗口和視圖外,還有文檔、文檔模板或應(yīng)用程序本身。6/12/202173.文檔-視圖結(jié)構(gòu)(續(xù))視圖在文檔和用戶之間起中介作用接收用戶的輸入,并接受用戶的修改;直接或間接的訪問文檔類中的成員變量,從文檔類中(不是從存儲介質(zhì)中)取數(shù)據(jù),并顯示之。注意:通過調(diào)用文檔和視圖的接口將修改的信息反饋給文檔類,實際的數(shù)據(jù)更新仍然是由文檔來完成的。6/12/202184.文檔-視圖結(jié)構(gòu)的工作機制視圖通過GetDocum
5、ent()獲得文檔的指針;通過指針調(diào)用文檔類的成員函數(shù)讀取文檔數(shù)據(jù);視圖把數(shù)據(jù)顯示于計算機屏幕上;用戶與視圖的交互,查看/修改數(shù)據(jù);視圖通過相關(guān)聯(lián)的文檔類的成員函數(shù),將修改后的數(shù)據(jù)傳遞給文檔對象;文檔對象獲得修改過的數(shù)據(jù)之后,進行必要的修改,最后,存到磁盤文件(永久介質(zhì)中)。6/12/20219§16.2.文檔及其派生類6/12/2021101.文檔類所有文檔類都以CDocument類為基類。CDocument類是CCmdTarget類派生的。在Afxwin.h中定義CDocument類。6/12/2
6、021112.CDocument類的方法CDocument類提供了文檔類所需最基本功能,有兩類方法:一般方法;虛擬方法6/12/2021126/12/2021133.CDocument類的派生類構(gòu)造構(gòu)造CDocument類的派生類的基本步驟:為每一個文檔類型從CDocument類(或其派生類)派生一個相應(yīng)的文檔類;為文檔類添加成員變量。這些成員變量用來保存文檔的數(shù)據(jù);重載Serialize成員函數(shù),實現(xiàn)文檔數(shù)據(jù)的串行化。文檔的數(shù)據(jù)保存到成員變量,便于其他對象的訪問。串行化由函數(shù)Serialize()實
7、現(xiàn),它有一個參數(shù)是與所打開的文件相關(guān)對象Carchive,進行文檔的讀或?qū)憜我徊僮鞯膶ο蟆?/12/202114§16.3.視圖及其派生類6/12/2021151.視圖類視圖類CView是CWnd類直接派生的。CView及其派生類都具有CWnd的所有功能,可接受任何Windows消息。在Afxwin.h中定義CView類。6/12/2021162.CView類的方法6/12/2021173.CView類的派生類CEditView——支持類似編輯控件所要實現(xiàn)的功能,常見的文本操作,多由該類實現(xiàn)。其直接基
8、類不是CView類,而是類CCtrlView。CRichEditView——支持Rich文本操作。CTreeView——支持樹型控件所實現(xiàn)的功能,使數(shù)據(jù)的顯示方式更富于變化。ListView——類似于CTreeView,提供了一種簡捷地實現(xiàn)數(shù)據(jù)的不同顯示的途徑。CScrollView——提供視圖的滾動顯示。是CView直接派生類。注意:合理選擇CView或Cview派生類可省去許多編程工作量。6/12/202118§16.4.文檔模板類6/12/2021