文檔打印是許多Windows程序所必需的,在DOS下進(jìn)行圖形方面的打印是件比較麻煩的事,幸好Windows提供了統(tǒng)一接口,將程序員與具體的硬件系統(tǒng)隔離開(kāi)來(lái)。同時(shí)Visual C++ MFC(微軟基礎(chǔ)類(lèi)庫(kù))則將Windows的API函數(shù)以類(lèi)的形式封裝了很多細(xì)節(jié),使得許多煩瑣的工作變得輕松起來(lái)。
一般來(lái)說(shuō),用Visual C++編制需要打印的程序時(shí),在用AppWizard生成工程文件時(shí)就加入打印和打印預(yù)覽選項(xiàng)(該選項(xiàng)在AppWizard的第四步)。若用手工加入,則稍微麻煩些。
MFC對(duì)于打印的支持是在視類(lèi)CView中實(shí)現(xiàn)的,該類(lèi)中有如下幾個(gè)成員函數(shù)是與打印或打印預(yù)覽有關(guān)的:
BOOL OnPreparePrinting(CPrintInfopInfo)
void OnBeginPrinting(CDCpDC, CPrintInfopInfo)
void OnPrepareDC(CDCpDC, CPrintInfopInfo)
void OnPrint(CDCpDC, CPrintInfopInfo)
void OnEndPrinting(CDCpDC, CPrintInfopInfo)
其中,pDC是打印或顯示的設(shè)備場(chǎng)指針,pInfo是打印過(guò)程信息指針。pInfo包含許多有用的信息,如打印的總頁(yè)數(shù)、當(dāng)前打印頁(yè)的頁(yè)碼、是打印還是打印預(yù)覽、是否繼續(xù)打印等,具體參數(shù)內(nèi)容和意義可以參考MFC聯(lián)機(jī)手冊(cè)。
以上幾個(gè)函數(shù)都是虛函數(shù),可以重載。若在用AppWizard生成工程文件時(shí)選擇了打印和打印預(yù)覽選項(xiàng),則函數(shù)OnPreparePrinting、OnBeginPrinting、OnEndPrinting自動(dòng)地被AppWizard插入到你的視類(lèi)中加以重載。另外兩個(gè)函數(shù)則可以手工加入,如果使用的是Visual C++ 4.0以上版本,可以通過(guò)ClassWizard加入到視類(lèi)中。
這幾個(gè)函數(shù)在用戶(hù)選擇打印命令時(shí)由應(yīng)用框架自動(dòng)調(diào)用,用戶(hù)程序不用顯式調(diào)用。下面講述這幾個(gè)函數(shù)在打印過(guò)程中的調(diào)用順序及其意義。
1.OnPreparePrinting
OnPreparePrinting函數(shù)最先被調(diào)用,用來(lái)初始化打印機(jī)等。比如,若沒(méi)有安裝打印機(jī),則該函數(shù)將提示用戶(hù)安裝打印機(jī)。用戶(hù)程序可以向其中加入別的初始化代碼,比如,計(jì)算打印你的文檔所需要的總頁(yè)數(shù),然后調(diào)用視類(lèi)中的打印機(jī)初始化函數(shù)BOOL DoPreparePrinting(CPrintInfopInfo)即可。而用AppWizard生成的代碼中,OnPreparePrinting函數(shù)將只是調(diào)用函數(shù)DoPreparePrinting,并傳遞參數(shù)。
2.OnBeingPrinting
OnBeingPrinting函數(shù)是開(kāi)始打印文檔前調(diào)用的函數(shù),用戶(hù)可以在其中加入另一些對(duì)于打印過(guò)程的初始化代碼,比如分配打印過(guò)程中將要使用的“筆”(CPen)、“刷子”(CBrush)等,默認(rèn)的代碼中該函數(shù)將直接返回。
3.OnEndPrinting
OnEndPrinting函數(shù)是與OnBeginPrinting函數(shù)相對(duì)應(yīng)的函數(shù),它在打印完成后由應(yīng)用框架調(diào)用,用于釋放在OnBeginPrinting中分配的“對(duì)象”,如“筆”、“刷子”等,其默認(rèn)的代碼中該函數(shù)將直接返回。
4.OnPrepareDC
OnPrepareDC函數(shù)用于在打印前準(zhǔn)備打印設(shè)備場(chǎng),如窗口大小、原點(diǎn),視圖大小、原點(diǎn)等。同時(shí)該函數(shù)在視類(lèi)顯示文檔內(nèi)容時(shí)也被調(diào)用,默認(rèn)的代碼中該函數(shù)調(diào)用基類(lèi)中的OnPrepareDC函數(shù)。
5.OnPrint
OnPrint函數(shù)則是具體的打印過(guò)程,它利用前面準(zhǔn)備好的設(shè)備場(chǎng)進(jìn)行打印。
這幾個(gè)函數(shù)中,OnPreparePrinting、OnBeginPrinting、OnEndPrinting函數(shù)在一次打印過(guò)程中將只被調(diào)用一次,不管這一次打印內(nèi)容有多少頁(yè),而OnPrepareDC、OnPrint函數(shù)則每打印一頁(yè)都將被調(diào)用一次,這種調(diào)用次序?qū)τ诖蛴∈呛苡杏玫摹?
在編程中,相信大家只要用好這幾個(gè)基本函數(shù),一定會(huì)編制出滿(mǎn)意的Windows打印程序。
posted on 2010-07-15 23:53
zhaoyg 閱讀(670)
評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi):
MFC學(xué)習(xí)筆記