C++與面向?qū)ο蟪绦蛟O計教程_第1頁
C++與面向?qū)ο蟪绦蛟O計教程_第2頁
C++與面向?qū)ο蟪绦蛟O計教程_第3頁
C++與面向?qū)ο蟪绦蛟O計教程_第4頁
C++與面向?qū)ο蟪绦蛟O計教程_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Visual C+與面向?qū)ο蟪绦蛟O計教程與面向?qū)ο蟪绦蛟O計教程第十五章第十五章 文檔讀寫與打印文檔讀寫與打印 教學目標教學目標n序列化序列化n文檔打印編程技術文檔打印編程技術學習要求學習要求n深入理解序列化的基本思想深入理解序列化的基本思想n掌握序列化及相應處理代碼的編制掌握序列化及相應處理代碼的編制n了解了解MFC的打印工作流程的打印工作流程n掌握打印程序編制掌握打印程序編制授授 課課 內(nèi)內(nèi) 容容n15.1 序列化(序列化(Serialize) n15.2 打印和打印預覽打印和打印預覽 n15.3自定義類的序列化自定義類的序列化n15.4 編寫獨立的打印處理程序編寫獨立的打印處理程序 n15

2、.5 更新命令用戶接口(更新命令用戶接口(UI)消息)消息 n調(diào)試技術調(diào)試技術n程序設計舉例程序設計舉例15.1 序列化(序列化(Serialize)n文檔對象可以將其當前狀態(tài)(由其成員變量的值文檔對象可以將其當前狀態(tài)(由其成員變量的值表示)寫入到永久性存儲體(通常是指磁盤)中,表示)寫入到永久性存儲體(通常是指磁盤)中,以后還可從永久性存儲體中讀取對象的狀態(tài)(載以后還可從永久性存儲體中讀取對象的狀態(tài)(載入),從而重建對象。入),從而重建對象。 n在文檔打開時能夠自動把文檔中的數(shù)據(jù)轉(zhuǎn)換為文在文檔打開時能夠自動把文檔中的數(shù)據(jù)轉(zhuǎn)換為文檔類所支持的對象,在保存文檔時能夠自動將文檔類所支持的對象,在保

3、存文檔時能夠自動將文檔類對象轉(zhuǎn)換為文檔數(shù)據(jù)格式;檔類對象轉(zhuǎn)換為文檔數(shù)據(jù)格式;nCArchiveCArchive類類運算符:插入運算符:插入()()()修改數(shù)據(jù)的存盤修改數(shù)據(jù)的存盤n設置修改標志的成員函數(shù)設置修改標志的成員函數(shù)CDocument:SetModifiedFlag void SetModifiedFlag( BOOL bModified = TRUE );n設置的時機設置的時機l一般在視圖類函數(shù)中,修改數(shù)據(jù)后調(diào)用例例15-1 序列化序列化 n為例為例11-7的吹泡泡程序增加的吹泡泡程序增加序列化序列化 代碼代碼if(ar.IsStoring() ar m_nBubbleCount;f

4、or(int i=0; im_nBubbleCount; i+)ar m_nBubbleCount;for(int i=0; i m_rectBubblei; 注意事項注意事項n 的方向的方向n 變量存盤與取盤的順序,必須保證一致!變量存盤與取盤的順序,必須保證一致!n 計數(shù)器變量應在數(shù)組之前計數(shù)器變量應在數(shù)組之前15.2 打印和打印預覽打印和打印預覽 n顯示與打印的相同之處顯示與打印的相同之處n顯示與打印的不同之處顯示與打印的不同之處顯示與打印的相同之處顯示與打印的相同之處n文檔打印時,文檔打印時,OnDraw函數(shù)接收到的設備描述表對函數(shù)接收到的設備描述表對象是與當前打印相關的象是與當前打印

5、相關的CDc對象。對象。n實現(xiàn)實現(xiàn)“所見即所得所見即所得”(OnDraw為共用函數(shù))為共用函數(shù))l顯示的調(diào)用順序:OnPaint-OnDrawl打印的調(diào)用順序:OnPrint-OnDrawnMM_TEXT模式編程模式編程l打印機與屏幕顯示坐標模式相同顯示與打印的不同之處顯示與打印的不同之處n分辨率不同分辨率不同Arial字體:printer-50 screen-20n邊界處理不同邊界處理不同l屏幕是無界的l打印紙是有界的例例15-2n修改例修改例11-7的程序并觀察其打印結(jié)果。的程序并觀察其打印結(jié)果。void CMyView:OnDraw(CDC* pDC) CRect rect; GetCl

6、ientRect(&rect);pDC-Rectangle(rect); /畫邊框畫邊框for(int i=0; im_nBubbleCount; i+)/ 在視圖上顯示文檔數(shù)據(jù)在視圖上顯示文檔數(shù)據(jù) pDC-Ellipse(pDoc-m_rectBubblei); 例例15-3n改進吹泡泡程序,使之打印輸出與屏幕顯示的比改進吹泡泡程序,使之打印輸出與屏幕顯示的比例相近例相近n/ 設置映射模式設置映射模式void CMyView:OnPrepareDC(CDC *pDC, CPrintInfo *pInfo)pDC-SetMapMode(MM_LOMETRIC);CView:OnPrep

7、areDC(pDC, pInfo); 例例15-3n/ 響應點擊鼠標左鍵消息響應點擊鼠標左鍵消息CClientDC dc(this);/ 設置設備環(huán)境設置設備環(huán)境OnPrepareDC(&dc);if(pDoc-m_nBubbleCount m_rectBubblepDoc-m_nBubbleCount = rect; pDoc-m_nBubbleCount+; pDoc-SetModifiedFlag();/ 設置修改標志設置修改標志 CPrintInfo類類n數(shù)據(jù)成員數(shù)據(jù)成員m_nCurPage(當前正在打印的頁碼); m_rectDraw(當前可用頁面區(qū)域);n成員函數(shù)成員函數(shù)S

8、etMinPage()(指定文檔的首頁頁碼)SetMaxPage()(指定文檔的尾頁頁碼)取關于打印頁碼的設置UINT GetMinPage( ) const;UINT GetMaxPage( ) const;打印和打印預覽的主要過程打印和打印預覽的主要過程l調(diào)用調(diào)用OnPreparePrinting函數(shù)創(chuàng)建與打印有關的設備函數(shù)創(chuàng)建與打印有關的設備描述表對象描述表對象l調(diào)用調(diào)用OnBeginPrinting函數(shù)并基于已創(chuàng)建的設備描述函數(shù)并基于已創(chuàng)建的設備描述表對象來設置文檔特性,將任何需要的信息保存表對象來設置文檔特性,將任何需要的信息保存在設備描述表對象中例如分配字體、畫筆、畫在設備描述表對

9、象中例如分配字體、畫筆、畫刷和其他用于打印的對象。刷和其他用于打印的對象。l調(diào)用調(diào)用OnPrepareDC函數(shù)為打印設置文本或繪圖員性,函數(shù)為打印設置文本或繪圖員性,調(diào)整視口原點以便打印當前頁。調(diào)整視口原點以便打印當前頁。l調(diào)用調(diào)用OnPrint函數(shù),該函數(shù)在調(diào)用函數(shù),該函數(shù)在調(diào)用OnDraw前先選擇前先選擇一種字體或其他由一種字體或其他由OnBeginPrinting分配的對象,然分配的對象,然后調(diào)用后調(diào)用OnDraw函數(shù)執(zhí)行輸出。函數(shù)執(zhí)行輸出。l調(diào)用調(diào)用0nEndPrinting刪除由刪除由onBeginPrinting分配的所分配的所有對象。有對象。(對于每頁,(對于每頁,3,4兩步反復

10、調(diào)用)兩步反復調(diào)用)15.3自定義類的序列化自定義類的序列化n從從CObject類派生出自定義類類派生出自定義類n重載自定義類的重載自定義類的Serialize()成員函數(shù)()成員函數(shù)n說明中,加入說明中,加入DECLARE_SERIAL()宏()宏n為自定義類定義一個不帶參數(shù)的構(gòu)造函數(shù);為自定義類定義一個不帶參數(shù)的構(gòu)造函數(shù);n為自定義類重載賦值運算符為自定義類重載賦值運算符“=”;n在自定義類的源代碼文件中加入在自定義類的源代碼文件中加入IMPLEMENT_SERIAL()宏。()宏。15.4 編寫獨立的打印處理程序編寫獨立的打印處理程序 n利用現(xiàn)有模塊利用現(xiàn)有模塊n打印頁眉、正文、頁腳;打

11、印頁眉、正文、頁腳;n選頁打印選頁打印OnPrint函數(shù)函數(shù)n打印頁眉CDocument:GetTitle ( )取當前文檔名取當前文檔名CDC:GetTextExtent ( ) 計算字符串在當前映射模式下的寬度和高度計算字符串在當前映射模式下的寬度和高度n打印泡泡數(shù)據(jù)n打印頁腳MM_WIPS模式模式1/1440英寸英寸point.y-=36015.5 更新命令用戶接口(更新命令用戶接口(UI)消息)消息 n菜單選項是否無效的?(灰色顯示)菜單選項是否無效的?(灰色顯示)1、在窗口類中加入處理更新命令用戶接口消息函數(shù)、在窗口類中加入處理更新命令用戶接口消息函數(shù)的說明;的說明;2、在窗口類的消

12、息映射宏中加入更新命令用戶接口、在窗口類的消息映射宏中加入更新命令用戶接口宏;宏;3、編寫更新命令用戶接口消息處理函數(shù)。、編寫更新命令用戶接口消息處理函數(shù)。n打勾打勾: (m_nGrad為為3,則打勾),則打勾)pCmdUI-SetCheck(m_nGrad=3);n變灰變灰: (m_nGrad為為0,則變灰,則變灰,即即:不為不為0有效)有效)pCmdUI-Enable(m_nGrad!=0);調(diào)試技術調(diào)試技術 nDeveloper Studio的輸出窗口的輸出窗口 l激活或取消 l選項Build(建立)Debug(調(diào)試)Find In Files 1(在文件1中查找)Find In Fil

13、es 2(在文件2中查找)Results(結(jié)果)。 程序設計舉例程序設計舉例 n例例15-1 實現(xiàn)吹泡泡程序的序列化功能。實現(xiàn)吹泡泡程序的序列化功能。n例例15-2 修改例修改例11-6的程序并觀察其打印結(jié)果。的程序并觀察其打印結(jié)果。n例例15-3 改進吹泡泡程序,使之打印輸出與屏幕顯示的比例相改進吹泡泡程序,使之打印輸出與屏幕顯示的比例相近。近。 n例例15-4 聲明一個聲明一個Person類,并使之支持序列化。類,并使之支持序列化。 n例例15-5 修改例修改例15-3的吹泡泡程序,使其打印每個泡泡的數(shù)據(jù)的吹泡泡程序,使其打印每個泡泡的數(shù)據(jù)值。值。 n例例15-6 使用定時器使一個泡泡(橢

14、圓)在屏幕中自動移動,使用定時器使一個泡泡(橢圓)在屏幕中自動移動,設置三級速度菜單,并使速度菜單的相應選項前打鉤。設置三級速度菜單,并使速度菜單的相應選項前打鉤。n例例15-7 七巧板七巧板例例15-7n七巧板是我國民間流傳的七巧板是我國民間流傳的一種拼圖游戲,制作簡單一種拼圖游戲,制作簡單但變化多端,具有很高的但變化多端,具有很高的益智價值。七巧板制作非益智價值。七巧板制作非常簡單,使用一張正方形常簡單,使用一張正方形的厚紙板按圖的厚紙板按圖15-6所示圖所示圖樣裁開即可。本程序在計樣裁開即可。本程序在計算機上模擬使用七巧板進算機上模擬使用七巧板進行拼圖行拼圖 上機練習題上機練習題n制作簡單編輯器:重載鍵盤消息,接收用戶字符輸入并在客制作簡單編輯器:重載鍵盤消息,接收用戶字符輸入并在客戶區(qū)顯示。要求可保存輸入字符并序列化。戶區(qū)顯示。要求可保存輸入字符并序列化。n為例為例13-4增加序列化代碼。增加序列化代碼。n為例為例13-5增加序列化代碼。增加序列化代碼。n為例為例14-1編寫序列化代碼,并編寫打印代碼,使打印格式為編寫序列化代碼

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論