版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
VisualC++與面向?qū)ο蟪绦蛟O(shè)計教程第十五章
文檔讀寫與打印
計算機教學(xué)實驗中心西安交通大學(xué)教學(xué)目標序列化文檔打印編程技術(shù)學(xué)習(xí)要求深入理解序列化的基本思想掌握序列化及相應(yīng)處理代碼的編制了解MFC的打印工作流程掌握打印程序編制授課內(nèi)容15.1序列化(Serialize)
15.2打印和打印預(yù)覽
15.3自定義類的序列化15.4編寫?yīng)毩⒌拇蛴√幚沓绦?/p>
15.5更新命令用戶接口(UI)消息
調(diào)試技術(shù)程序設(shè)計舉例15.1序列化(Serialize)文檔對象可以將其當前狀態(tài)(由其成員變量的值表示)寫入到永久性存儲體(通常是指磁盤)中,以后還可從永久性存儲體中讀取對象的狀態(tài)(載入),從而重建對象。在文檔打開時能夠自動把文檔中的數(shù)據(jù)轉(zhuǎn)換為文檔類所支持的對象,在保存文檔時能夠自動將文檔類對象轉(zhuǎn)換為文檔數(shù)據(jù)格式;CArchive類運算符:插入(<<)運算符:提取(>>)修改數(shù)據(jù)的存盤設(shè)置修改標志的成員函數(shù)CDocument::SetModifiedFlag
voidSetModifiedFlag(BOOLbModified=TRUE);設(shè)置的時機一般在視圖類函數(shù)中,修改數(shù)據(jù)后調(diào)用例15-1序列化為例11-7的吹泡泡程序增加序列化代碼if(ar.IsStoring()){ ar<<m_nBubbleCount;
for(inti=0;i<m_nBubbleCount;i++)
ar<<m_rectBubble[i];}else{ ar>>m_nBubbleCount;
for(inti=0;i<m_nBubbleCount;i++)
ar>>m_rectBubble[i];}
注意事項
<<與>>的方向變量存盤與取盤的順序,必須保證一致!計數(shù)器變量應(yīng)在數(shù)組之前15.2打印和打印預(yù)覽顯示與打印的相同之處顯示與打印的不同之處顯示與打印的相同之處文檔打印時,OnDraw函數(shù)接收到的設(shè)備描述表對象是與當前打印相關(guān)的CDc對象。實現(xiàn)“所見即所得”(OnDraw為共用函數(shù))顯示的調(diào)用順序:OnPaint->OnDraw打印的調(diào)用順序:OnPrint->OnDrawMM_TEXT模式編程打印機與屏幕顯示坐標模式相同顯示與打印的不同之處分辨率不同Arial字體:printer50screen20邊界處理不同屏幕是無界的打印紙是有界的例15-2修改例11-7的程序并觀察其打印結(jié)果。voidCMyView::OnDraw(CDC*pDC){
CRect
rect;
GetClientRect(&rect);
pDC->Rectangle(rect);//畫邊框
for(inti=0;i<pDoc->m_nBubbleCount;i++) //在視圖上顯示文檔數(shù)據(jù)
pDC->Ellipse(pDoc->m_rectBubble[i]); }
例15-3改進吹泡泡程序,使之打印輸出與屏幕顯示的比例相近//設(shè)置映射模式voidCMyView::OnPrepareDC(CDC*pDC,CPrintInfo*pInfo){
pDC->SetMapMode(MM_LOMETRIC);
CView::OnPrepareDC(pDC,pInfo); }
例15-3//響應(yīng)點擊鼠標左鍵消息
CClientDCdc(this); //設(shè)置設(shè)備環(huán)境
OnPrepareDC(&dc);
if(pDoc->m_nBubbleCount<MAX_BUBBLE) { intr=rand()%50+10;
CRect
rect(point.x-r,point.y-r,point.x+r,point.y+r);
InvalidateRect(rect,FALSE);
dc.DPtoLP(rect); //轉(zhuǎn)換物理坐標為邏輯坐標
pDoc->m_rectBubble[pDoc->m_nBubbleCount]=rect;
pDoc->m_nBubbleCount++;
pDoc->SetModifiedFlag(); //設(shè)置修改標志 }CPrintInfo類數(shù)據(jù)成員m_nCurPage(當前正在打印的頁碼);
m_rectDraw(當前可用頁面區(qū)域);成員函數(shù)SetMinPage()(指定文檔的首頁頁碼)SetMaxPage()(指定文檔的尾頁頁碼)取關(guān)于打印頁碼的設(shè)置UINTGetMinPage()const;UINTGetMaxPage()const;打印和打印預(yù)覽的主要過程調(diào)用OnPreparePrinting函數(shù)創(chuàng)建與打印有關(guān)的設(shè)備描述表對象調(diào)用OnBeginPrinting函數(shù)并基于已創(chuàng)建的設(shè)備描述表對象來設(shè)置文檔特性,將任何需要的信息保存在設(shè)備描述表對象中.例如分配字體、畫筆、畫刷和其他用于打印的對象。調(diào)用OnPrepareDC函數(shù)為打印設(shè)置文本或繪圖員性,調(diào)整視口原點以便打印當前頁。調(diào)用OnPrint函數(shù),該函數(shù)在調(diào)用OnDraw前先選擇一種字體或其他由OnBeginPrinting分配的對象,然后調(diào)用OnDraw函數(shù)執(zhí)行輸出。調(diào)用0nEndPrinting刪除由onBeginPrinting分配的所有對象。(對于每頁,3,4兩步反復(fù)調(diào)用)15.3自定義類的序列化從CObject類派生出自定義類重載自定義類的Serialize()成員函數(shù)說明中,加入DECLARE_SERIAL()宏為自定義類定義一個不帶參數(shù)的構(gòu)造函數(shù);為自定義類重載賦值運算符“=”;在自定義類的源代碼文件中加入IMPLEMENT_SERIAL()宏。15.4編寫?yīng)毩⒌拇蛴√幚沓绦蚶矛F(xiàn)有模塊打印頁眉、正文、頁腳;選頁打印OnPrint函數(shù)打印頁眉CDocument::GetTitle()取當前文檔名CDC::GetTextExtent()
計算字符串在當前映射模式下的寬度和高度打印泡泡數(shù)據(jù)打印頁腳MM_WIPS模式1/1440英寸point.y-=36015.5更新命令用戶接口(UI)消息菜單選項是否無效的?(灰色顯示)1、在窗口類中加入處理更新命令用戶接口消息函數(shù)的說明;2、在窗口類的消息映射宏中加入更新命令用戶接口宏;3、編寫更新命令用戶接口消息處理函數(shù)。打勾:(m_nGrad為3,則打勾)pCmdUI->SetCheck(m_nGrad==3);變灰:(m_nGrad為0,則變灰,即:不為0有效)pCmdUI->Enable(m_nGrad!=0);調(diào)試技術(shù)DeveloperStudio的輸出窗口激活或取消選項Build(建立)Debug(調(diào)試)FindInFiles1(在文件1中查找)FindInFiles2(在文件2中查找)Results(結(jié)果)。程序設(shè)計舉例例15-1實現(xiàn)吹泡泡程序的序列化功能。例15-2修改例11-6的程序并觀察其打印結(jié)果。例15-3改進吹泡泡程序,使之打印輸出與屏幕顯示的比例相近。例15-4聲明一個Person類,并使之支持序列化。例15-5修改例15-3的吹泡泡程序,使其打印每個泡泡的數(shù)據(jù)值。例15-6使用定時器使一個泡泡(橢圓)在屏幕中自動移動,設(shè)置三級速度菜單,并使速度菜單的相應(yīng)選項前打鉤。例15-7
七巧板例15-7七巧板是我國民間流傳的一種拼圖游戲,制作簡單但變化多端,具有很高的益智價值。七巧板制作非常簡單,使用一張正方形的厚紙板按圖15-6所示圖樣裁開即可。本程序在計算機上模擬使用七巧板進行拼圖上機練習(xí)題制作簡單編輯器:重載鍵盤消息,接收用戶字符輸入并在客戶區(qū)顯示。要求可保存輸入字符并序列化。為例13-4增加序列化代碼。為例13-5增加序列化代碼。為例14-1編寫序列化代碼,并編寫打印代碼,使打印格式為每行一職工: 姓名
性別
出生日期
婚姻狀況
所在部門
職務(wù)
=============================================
張三
男
1972/10/03未婚
開發(fā)部
組
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 倉庫警衛(wèi)員管理制度(3篇)
- 墻面夯土施工方案(3篇)
- 315燈具活動策劃方案(3篇)
- 關(guān)懷活動運營策劃方案(3篇)
- 光纖機房施工方案(3篇)
- 2026河南鄭州電力職業(yè)技術(shù)學(xué)院1-2月教師招聘60人參考考試題庫及答案解析
- 2026山東事業(yè)單位統(tǒng)考淄博市市屬招聘綜合類崗位18人備考考試試題及答案解析
- 2026浙江杭州珠江體育文化發(fā)展有限公司招聘參考考試題庫及答案解析
- 2026廣西崇左市事業(yè)單位招聘1652人備考考試題庫及答案解析
- 廣安市廣安區(qū)白市鎮(zhèn)人民政府2026年選用1名片區(qū)紀檢監(jiān)督員備考考試試題及答案解析
- 維修事故協(xié)議書
- 2025ESC+EAS血脂管理指南要點解讀課件
- 2025至2030外周靜脈血栓切除裝置行業(yè)調(diào)研及市場前景預(yù)測評估報告
- 矛盾糾紛排查化解課件
- 2026年人力資源共享服務(wù)中心建設(shè)方案
- JJG(交通) 141-2017 瀝青路面無核密度儀
- 石材加工成本與報價分析報告
- 幾何形體結(jié)構(gòu)素描教案
- 安全員(化工安全員)國家職業(yè)標準(2025年版)
- 制袋車間操作規(guī)范及培訓(xùn)手冊
- 四川省成都市簡陽市2026屆數(shù)學(xué)七上期末監(jiān)測試題含解析
評論
0/150
提交評論