欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Viusal C++6.0實(shí)現文檔的分頁(yè)打印

2004-11-25 09:37作者:劉濤出處:天極網(wǎng)責任編輯:方舟

  在Windows應用程序開(kāi)發(fā)過(guò)程中,實(shí)現文檔打印功能是每一個(gè)開(kāi)發(fā)人員都不得不面對的問(wèn)題。在使用Visual C++6.0這一開(kāi)發(fā)工具的情況下,雖然它的AppWizard生成的應用程序框架中缺省地包括打印功能,但是如何具體實(shí)現打印功能的確是一件非常繁雜的事情,尤其是要實(shí)現文檔的分頁(yè)打印,更是一個(gè)讓很多初學(xué)者感到困惑的問(wèn)題。筆者結合自己學(xué)習體會(huì ),談一談如何實(shí)現文檔的分頁(yè)打印功能,希望可以對廣大讀者朋友們起到一定的幫助。

  一、MFC程序默認的打印流程

  Visual C++6.0的應用程序向導(AppWizard)生成的應用程序具備了實(shí)現打印功能的基本框架,當用戶(hù)從菜單中選擇Print命令時(shí),應用程序就用ID_FILE_PRINT命令消息調用程序視圖類(lèi)的缺省處理函數OnFilePrint()來(lái)開(kāi)始打印過(guò)程,并創(chuàng )建用語(yǔ)打印的設備環(huán)境,來(lái)滿(mǎn)足應用程序特定的需要。其中要重載應用程序視圖類(lèi)的幾個(gè)相應函數,其函數表如圖一所示:

函數 說(shuō)明
OnBeginPrinting() 重載此函數來(lái)創(chuàng )建在打印文檔時(shí)所需的資源,如字體等。在此也可以設置最大頁(yè)數。
OnDraw() 該函數提供三重服務(wù),在框架窗口、預覽窗口和打印機上顯示數據,具體在哪里顯示,依賴(lài)于作為函數參數傳遞的設備環(huán)境。
OnEndPrinting() 重載此函數用來(lái)釋放在OnBeginPrinting()中創(chuàng )建的資源。
OnPrepareDC() 重載此函數來(lái)修改用于顯示或打印文檔的設備環(huán)境,可以在此處理?yè)Q頁(yè)。
OnPreparePrinting() 提供打印文檔的最大頁(yè)數,如果在此不設置頁(yè)數,必須在OnBeiginPrinting()中設置。
OnPrint() 提供附加打印服務(wù),如在Cview::OnDraw()函數中不提供的打印頁(yè)眉、頁(yè)腳。
               表一、實(shí)現打印功能需要重載的幾個(gè)CView類(lèi)成員函數

  OnFilePrint()函數一開(kāi)始就調用OnPreparePrinting()函數,該函數缺省時(shí)則調用DoPreparePrinting()函數來(lái)顯示打印對話(huà)框,創(chuàng )建的OnPreparePrinting()程序如下:

BOOL CmyView::OnpreparePrinting(CprintInfo *pInfo)
{
 //default preparetion
 return DoPreparePrinting(pInfo);
}

  程序中,OnPreparePrinting()提供一個(gè)指向CprintInfo對象的指針參數,使用此對象,應用程序能夠獲取關(guān)于打印作業(yè)的信息,同時(shí)對屬性(例如最大頁(yè)數)進(jìn)行初始化。DoPreparePrinting()顯示對話(huà)框時(shí),由用戶(hù)設置CprintInfo類(lèi)的許多數據成員變量供應用程序使用或再設置,即用于創(chuàng )建整個(gè)打印的設備環(huán)境。

  打印過(guò)程都要用到CprintInfo結構,它里面保存了打印任務(wù)的信息。OnPreparePrinting()重載是為了指明打印文件的長(cháng)度。在調用Cview::DoPreparePrinting()之前,可用其參數來(lái)修改CprintInfo結構。重載OnPreparePrinting()還可以使用CprintInfo結構的成員函數SetMaxPage()、SetMinPage()來(lái)設置文檔的最大、最小頁(yè)數。當把CprintInfo結構中表明文檔是否被直接打印標志變量m_bDirect設置為T(mén)RUE時(shí),調用DoPreparePrinting()就不再顯示打印對話(huà)框。此時(shí),由于沒(méi)有打印對話(huà)框,可以用SetToPage()和SetFromPage()設置打印的起始頁(yè)。

  接下來(lái),打印程序調用視圖類(lèi)的OnBegingPrinting()函數,該函數進(jìn)一步進(jìn)行初始化工作,并傳送一個(gè)指向設備環(huán)境的指針和一個(gè)指向CprintInfo結構的指針。

  在開(kāi)始逐頁(yè)打印之前,調用OnPrepareDC()函數,這是每一頁(yè)執行一次的打印循環(huán)的開(kāi)始,該函數的修改用于顯示或打印文檔的設備環(huán)境,為每頁(yè)設置映像模式,創(chuàng )建字體,檢查文檔是否結束??梢园袰PrintInfo結構中的m_bContinuePrinting標志設置為False來(lái)發(fā)出打印完畢信號以終止打印作業(yè)。

  在調用了OnPrepareDC()函數之后,ID_FILE_PRINT消息處理函數調用了OnPrint()函數,該函數的缺省功能是把打印工作放在視圖類(lèi)的OnDraw()函數中進(jìn)行,它傳送一個(gè)指向設備環(huán)境的指針和一個(gè)指向CprintInfo結構的指針,負責每一頁(yè)的打印。

  歸納起來(lái),MFC應用程序的打印流程如下:


圖一、打印流程圖

  二、文檔分頁(yè)打印功能的實(shí)現

  為了說(shuō)明如何實(shí)現文檔的分頁(yè)打印功能,下面給出了分頁(yè)打印輸出幾個(gè)矩形的實(shí)例。首先啟動(dòng)Visual C++6.0生成一個(gè)應用程序框架,并重載視圖類(lèi)的OnBeginPrinting()函數,在該函數中獲取設備環(huán)境信息,設置頁(yè)高、頁(yè)數,由此設置打印對話(huà)框的初值,具體代碼如下:

Void CmyView::OnBeginPrinting(CDC*pdc,CprintInfo *pInfo)
{
 CmyDoc *pDoc=GetDocment();//得到文檔指針;
 ASSERT_VALID(pDoc);//確認指針的有效性;
 int pageHeitht=pDC->GetDeviceCaps(VERTRES);//由頁(yè)頂到頁(yè)底可打印點(diǎn)的個(gè)數,從設備環(huán)境中得到頁(yè)面高度;
 int logPixelsy=pDC->GetDeviceCaps(LOGPEXELSY);//每英寸的點(diǎn)數;
 int rectHeight=(int)(4.2*logPixelsy);//計算矩形的高度,可以由用戶(hù)自行設置;
 int numPages=Pdoc->m_numRects*rectHeight/pageHeight+1;//由矩形數計算輸出頁(yè)數;
 pInfo->SetMaxPage(numPages);//初始化pInfo結構;
}

  為了將矩形打印輸出,還應該重載Cview::OnPrepareDC()函數,實(shí)現輸出圖形的位置定位,函數首先測試應用程序是否正在調用CDC類(lèi)的成員函數IsPrinting()打印數據,若正在打印,則判斷當前頁(yè)的數據屬于哪一部分,由GetDeviceCaps()函數得當環(huán)境設備信息;接著(zhù)確定打印新視圖的原點(diǎn),并將原點(diǎn)值由SetViewportOrg()傳遞給設備環(huán)境。具體代碼如下:

Void CmyView::OnPrepareDC(CDC*pDC,CprintInfo *pInfo)
{
 if(pDC->IsPrinting())//若正在進(jìn)行打印則判斷當前頁(yè)數據;
 {
  int pageHeight=pDC->GetDeviceCaps(VERTRES);
  int originY=pageHeight*((pInfo->m_nCurpage-1);
  pDC->SetViewportOrg(0,-originY)
 }
 Cview::OnPrepareDC(pDC,pInfo);
}

  三、小結

  通過(guò)上文的介紹,相信讀者朋友應該對Visual C++編程實(shí)現文檔的分頁(yè)打印功能有了一定的了解,大家可以在此基礎上,參考相關(guān)學(xué)習資料,根據應用程序的不同需要,編制實(shí)現不同的打印程序。

關(guān)注此文的讀者還看過(guò):

    返回開(kāi)發(fā)頻道首頁(yè)

    本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
    打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
    猜你喜歡
    類(lèi)似文章
    使用VC++能否實(shí)現輸入數據表單界面與打印效果一樣
    VC++對話(huà)框程序打印及打印預覽的實(shí)現
    VC中基于CEditView的打印和打印預覽設計
    Word文檔怎么分頁(yè)打???Word設置分頁(yè)打印方法
    使用 MFC 編寫(xiě)打印程序
    教你使用Word縮放打印功能。知道了,其實(shí)比excel更好用
    更多類(lèi)似文章 >>
    生活服務(wù)
    分享 收藏 導長(cháng)圖 關(guān)注 下載文章
    綁定賬號成功
    后續可登錄賬號暢享VIP特權!
    如果VIP功能使用有故障,
    可點(diǎn)擊這里聯(lián)系客服!

    聯(lián)系客服

    欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久