




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Visual C+與面向?qū)ο蟪绦蛟O(shè)計(jì)教程與面向?qū)ο蟪绦蛟O(shè)計(jì)教程第十五章第十五章 文檔讀寫與打印文檔讀寫與打印 教學(xué)目標(biāo)教學(xué)目標(biāo)n序列化序列化n文檔打印編程技術(shù)文檔打印編程技術(shù)學(xué)習(xí)要求學(xué)習(xí)要求n深入理解序列化的基本思想深入理解序列化的基本思想n掌握序列化及相應(yīng)處理代碼的編制掌握序列化及相應(yīng)處理代碼的編制n了解了解MFC的打印工作流程的打印工作流程n掌握打印程序編制掌握打印程序編制授授 課課 內(nèi)內(nèi) 容容n15.1 序列化(序列化(Serialize) n15.2 打印和打印預(yù)覽打印和打印預(yù)覽 n15.3自定義類的序列化自定義類的序列化n15.4 編寫?yīng)毩⒌拇蛴√幚沓绦蚓帉應(yīng)毩⒌拇蛴√幚沓绦?n15
2、.5 更新命令用戶接口(更新命令用戶接口(UI)消息)消息 n調(diào)試技術(shù)調(diào)試技術(shù)n程序設(shè)計(jì)舉例程序設(shè)計(jì)舉例15.1 序列化(序列化(Serialize)n文檔對象可以將其當(dāng)前狀態(tài)(由其成員變量的值文檔對象可以將其當(dāng)前狀態(tài)(由其成員變量的值表示)寫入到永久性存儲體(通常是指磁盤)中,表示)寫入到永久性存儲體(通常是指磁盤)中,以后還可從永久性存儲體中讀取對象的狀態(tài)(載以后還可從永久性存儲體中讀取對象的狀態(tài)(載入),從而重建對象。入),從而重建對象。 n在文檔打開時(shí)能夠自動把文檔中的數(shù)據(jù)轉(zhuǎn)換為文在文檔打開時(shí)能夠自動把文檔中的數(shù)據(jù)轉(zhuǎn)換為文檔類所支持的對象,在保存文檔時(shí)能夠自動將文檔類所支持的對象,在保
3、存文檔時(shí)能夠自動將文檔類對象轉(zhuǎn)換為文檔數(shù)據(jù)格式;檔類對象轉(zhuǎn)換為文檔數(shù)據(jù)格式;nCArchiveCArchive類類運(yùn)算符:插入運(yùn)算符:插入()()()修改數(shù)據(jù)的存盤修改數(shù)據(jù)的存盤n設(shè)置修改標(biāo)志的成員函數(shù)設(shè)置修改標(biāo)志的成員函數(shù)CDocument:SetModifiedFlag void SetModifiedFlag( BOOL bModified = TRUE );n設(shè)置的時(shí)機(jī)設(shè)置的時(shí)機(jī)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; 注意事項(xiàng)注意事項(xiàng)n 的方向的方向n 變量存盤與取盤的順序,必須保證一致!變量存盤與取盤的順序,必須保證一致!n 計(jì)數(shù)器變量應(yīng)在數(shù)組之前計(jì)數(shù)器變量應(yīng)在數(shù)組之前15.2 打印和打印預(yù)覽打印和打印預(yù)覽 n顯示與打印的相同之處顯示與打印的相同之處n顯示與打印的不同之處顯示與打印的不同之處顯示與打印的相同之處顯示與打印的相同之處n文檔打印時(shí),文檔打印時(shí),OnDraw函數(shù)接收到的設(shè)備描述表對函數(shù)接收到的設(shè)備描述表對象是與當(dāng)前打印相關(guān)的象是與當(dāng)前打印
5、相關(guān)的CDc對象。對象。n實(shí)現(xiàn)實(shí)現(xiàn)“所見即所得所見即所得”(OnDraw為共用函數(shù))為共用函數(shù))l顯示的調(diào)用順序:OnPaint-OnDrawl打印的調(diào)用順序:OnPrint-OnDrawnMM_TEXT模式編程模式編程l打印機(jī)與屏幕顯示坐標(biāo)模式相同顯示與打印的不同之處顯示與打印的不同之處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改進(jìn)吹泡泡程序,使之打印輸出與屏幕顯示的比改進(jìn)吹泡泡程序,使之打印輸出與屏幕顯示的比例相近例相近n/ 設(shè)置映射模式設(shè)置映射模式void CMyView:OnPrepareDC(CDC *pDC, CPrintInfo *pInfo)pDC-SetMapMode(MM_LOMETRIC);CView:OnPrep
7、areDC(pDC, pInfo); 例例15-3n/ 響應(yīng)點(diǎn)擊鼠標(biāo)左鍵消息響應(yīng)點(diǎn)擊鼠標(biāo)左鍵消息CClientDC dc(this);/ 設(shè)置設(shè)備環(huán)境設(shè)置設(shè)備環(huán)境OnPrepareDC(&dc);if(pDoc-m_nBubbleCount m_rectBubblepDoc-m_nBubbleCount = rect; pDoc-m_nBubbleCount+; pDoc-SetModifiedFlag();/ 設(shè)置修改標(biāo)志設(shè)置修改標(biāo)志 CPrintInfo類類n數(shù)據(jù)成員數(shù)據(jù)成員m_nCurPage(當(dāng)前正在打印的頁碼); m_rectDraw(當(dāng)前可用頁面區(qū)域);n成員函數(shù)成員函數(shù)S
8、etMinPage()(指定文檔的首頁頁碼)SetMaxPage()(指定文檔的尾頁頁碼)取關(guān)于打印頁碼的設(shè)置UINT GetMinPage( ) const;UINT GetMaxPage( ) const;打印和打印預(yù)覽的主要過程打印和打印預(yù)覽的主要過程l調(diào)用調(diào)用OnPreparePrinting函數(shù)創(chuàng)建與打印有關(guān)的設(shè)備函數(shù)創(chuàng)建與打印有關(guān)的設(shè)備描述表對象描述表對象l調(diào)用調(diào)用OnBeginPrinting函數(shù)并基于已創(chuàng)建的設(shè)備描述函數(shù)并基于已創(chuàng)建的設(shè)備描述表對象來設(shè)置文檔特性,將任何需要的信息保存表對象來設(shè)置文檔特性,將任何需要的信息保存在設(shè)備描述表對象中例如分配字體、畫筆、畫在設(shè)備描述表對
9、象中例如分配字體、畫筆、畫刷和其他用于打印的對象。刷和其他用于打印的對象。l調(diào)用調(diào)用OnPrepareDC函數(shù)為打印設(shè)置文本或繪圖員性,函數(shù)為打印設(shè)置文本或繪圖員性,調(diào)整視口原點(diǎn)以便打印當(dāng)前頁。調(diào)整視口原點(diǎn)以便打印當(dāng)前頁。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兩步反復(fù)
10、調(diào)用)兩步反復(fù)調(diào)用)15.3自定義類的序列化自定義類的序列化n從從CObject類派生出自定義類類派生出自定義類n重載自定義類的重載自定義類的Serialize()成員函數(shù)()成員函數(shù)n說明中,加入說明中,加入DECLARE_SERIAL()宏()宏n為自定義類定義一個(gè)不帶參數(shù)的構(gòu)造函數(shù);為自定義類定義一個(gè)不帶參數(shù)的構(gòu)造函數(shù);n為自定義類重載賦值運(yùn)算符為自定義類重載賦值運(yùn)算符“=”;n在自定義類的源代碼文件中加入在自定義類的源代碼文件中加入IMPLEMENT_SERIAL()宏。()宏。15.4 編寫?yīng)毩⒌拇蛴√幚沓绦蚓帉應(yīng)毩⒌拇蛴√幚沓绦?n利用現(xiàn)有模塊利用現(xiàn)有模塊n打印頁眉、正文、頁腳;打
11、印頁眉、正文、頁腳;n選頁打印選頁打印OnPrint函數(shù)函數(shù)n打印頁眉CDocument:GetTitle ( )取當(dāng)前文檔名取當(dāng)前文檔名CDC:GetTextExtent ( ) 計(jì)算字符串在當(dāng)前映射模式下的寬度和高度計(jì)算字符串在當(dāng)前映射模式下的寬度和高度n打印泡泡數(shù)據(jù)n打印頁腳MM_WIPS模式模式1/1440英寸英寸point.y-=36015.5 更新命令用戶接口(更新命令用戶接口(UI)消息)消息 n菜單選項(xiàng)是否無效的?(灰色顯示)菜單選項(xiàng)是否無效的?(灰色顯示)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)試技術(shù)調(diào)試技術(shù) nDeveloper Studio的輸出窗口的輸出窗口 l激活或取消 l選項(xiàng)Build(建立)Debug(調(diào)試)Find In Files 1(在文件1中查找)Find In Fil
13、es 2(在文件2中查找)Results(結(jié)果)。 程序設(shè)計(jì)舉例程序設(shè)計(jì)舉例 n例例15-1 實(shí)現(xiàn)吹泡泡程序的序列化功能。實(shí)現(xiàn)吹泡泡程序的序列化功能。n例例15-2 修改例修改例11-6的程序并觀察其打印結(jié)果。的程序并觀察其打印結(jié)果。n例例15-3 改進(jìn)吹泡泡程序,使之打印輸出與屏幕顯示的比例相改進(jìn)吹泡泡程序,使之打印輸出與屏幕顯示的比例相近。近。 n例例15-4 聲明一個(gè)聲明一個(gè)Person類,并使之支持序列化。類,并使之支持序列化。 n例例15-5 修改例修改例15-3的吹泡泡程序,使其打印每個(gè)泡泡的數(shù)據(jù)的吹泡泡程序,使其打印每個(gè)泡泡的數(shù)據(jù)值。值。 n例例15-6 使用定時(shí)器使一個(gè)泡泡(橢
14、圓)在屏幕中自動移動,使用定時(shí)器使一個(gè)泡泡(橢圓)在屏幕中自動移動,設(shè)置三級速度菜單,并使速度菜單的相應(yīng)選項(xiàng)前打鉤。設(shè)置三級速度菜單,并使速度菜單的相應(yīng)選項(xiàng)前打鉤。n例例15-7 七巧板七巧板例例15-7n七巧板是我國民間流傳的七巧板是我國民間流傳的一種拼圖游戲,制作簡單一種拼圖游戲,制作簡單但變化多端,具有很高的但變化多端,具有很高的益智價(jià)值。七巧板制作非益智價(jià)值。七巧板制作非常簡單,使用一張正方形常簡單,使用一張正方形的厚紙板按圖的厚紙板按圖15-6所示圖所示圖樣裁開即可。本程序在計(jì)樣裁開即可。本程序在計(jì)算機(jī)上模擬使用七巧板進(jìn)算機(jī)上模擬使用七巧板進(jìn)行拼圖行拼圖 上機(jī)練習(xí)題上機(jī)練習(xí)題n制作簡單編輯器:重載鍵盤消息,接收用戶字符輸入并在客制作簡單編輯器:重載鍵盤消息,接收用戶字符輸入并在客戶區(qū)顯示。要求可保存輸入字符并序列化。戶區(qū)顯示。要求可保存輸入字符并序列化。n為例為例13-4增加序列化代碼。增加序列化代碼。n為例為例13-5增加序列化代碼。增加序列化代碼。n為例為例14-1編寫序列化代碼,并編寫打印代碼,使打印格式為編寫序列化代碼
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度醫(yī)療健康股權(quán)分配與產(chǎn)業(yè)布局協(xié)議
- 二零二五年度酒店員工勞動合同與員工培訓(xùn)及職業(yè)素養(yǎng)提升合同
- 2025年度金融控股集團(tuán)間戰(zhàn)略資金借款合同
- 二零二五年度高空作業(yè)安全協(xié)議責(zé)任書(高空設(shè)備檢修安全協(xié)議)
- 二零二五年度鮮魚養(yǎng)殖與品牌營銷合作合同
- 二零二五年度電子商務(wù)平臺技術(shù)支持合同范本
- 二零二五年度汽車租賃代駕保險(xiǎn)保障合同
- 2025年度餐廳門面租賃與地方旅游發(fā)展合作合同
- 安徽省2025年度非全日制用工勞動合同書解除與終止協(xié)議
- 數(shù)據(jù)安全保障與服務(wù)合作合同
- 拗九節(jié)班會方案
- 2022年八大員的勞務(wù)員考試題及答案
- DLT5210.4-2018熱工施工質(zhì)量驗(yàn)收表格
- 醫(yī)院實(shí)習(xí)護(hù)士轉(zhuǎn)科表
- 2023年最新的郭氏宗祠的對聯(lián)大全
- 《中國古代文學(xué)史》宋代文學(xué)完整教學(xué)課件
- 新部編人教版四年級下冊道德與法治全冊教案(教學(xué)設(shè)計(jì))
- 物業(yè)服務(wù)企業(yè)市場拓展戰(zhàn)略規(guī)劃課件
- 2018年青海大學(xué)碩士論文格式模板
- 四年級道德與法治從中國制造到中國創(chuàng)造
- 兒童跌倒評估量表(Humpty-Dumpty)
評論
0/150
提交評論