亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? chap8_6.htm

?? VC++編程實例。非常詳細
?? HTM
字號:
<html>

<head>
<title>8.6 打印和打印預覽</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<link rel="stylesheet" href="../../../cpcw.css"></head>

<body link="#3973DE" alink="#3973DE" background="../../bg.gif">
<div align="center"><center>
    <table width="85%" border="0">
      <tr bgcolor="#FFFFFF"> 
        <td> 
          <p align="CENTER"><font color="red" face="Times New Roman"><b>8.6 </b></font><b><font color="red">打印和打印預覽</font></b></p>
          <p> <font size="4"></font>  最后,我們要給繪圖程序增加打印和打印預覽功能。我們希望文檔分兩頁打印,第一頁為封面,打印文檔名字。第二頁輸出文檔內容,并在頁眉上打印文檔名字。雖然AppWizard已經自動生成了打印和打印預覽的代碼,但是許多情況下,并不能符合要求。</p>
           
          <blockquote> 
            <p>這是因為:</p>
          </blockquote>
          <blockquote> 
            <p>1.打印機和窗口(屏幕)顯示的分辨率不同:打印機的分辨率用每英寸多少個點來描述,屏幕分辨率用單位面積的像素點來表示。對于同樣的Arial字體下的一個字符,在屏幕上用20個像素表示,而在打印機上則需要50點。在編輯器程序中,使用的映射模式為MM_TEXT,在這種模式下,一個邏輯單位對應于一個像素點。我們已經知道,Windows是按照邏輯單位來繪圖的。這樣,根據MM_TEXT模式的邏輯單位(實際上也就是像素數目)決定比例的原則打印出來得內容自然要比屏幕上看到的要小的多。因此,前面在初始化視圖OnInitialUpdate時候,在選擇繪圖的映射模式上,沒有采用以前使用的缺省的MM_TEXT模式,而是采用了MM_LOENGLISH。</p>
            <p>2.窗口和打印機對邊界的處理不同:窗口可以看作是無邊界的,可以在窗口外面畫,而不會引起錯誤,窗口會自動剪裁超出邊界的圖形。但打印機卻不同,它是按頁打印的。打印輸出時必須自己處理分頁和換頁,如果不作這樣的處理的話,行和行之間就會疊加起來。</p>
          </blockquote>
          <p>  要正確打印輸出屏幕上的內容,就必須解決以上兩個問題。對于第一個問題,有兩種方法:一是利用SetMapMode(int nMode) 
            設置別的映射模式,比如采用MM_LOENGLISH,不用像素而是采用0.01inch來衡量。</p>
          <p>   要處理打印分頁、換頁,就必須修改框架處理打印消息的缺省行為,在其中計算和換頁。此外,我們還希望在打印時在頁眉處能夠輸出標題(使用文件名作為標題)、在頁腳處輸出頁碼。</p>
           
          <p>  為了實現打印和打印預覽功能,首先需要了解MFC的打印體系結構,即框架是如何處理打印文檔的要求的。</p>
          <p>  MFC的打印工作大致上是這樣進行的:</p>
          <p>1.顯示Print對話框</p>
          <p>2.創建一個與當前打印機設置相匹配的設備上下文(CDC)對象。</p>
          <p>3.設置要打印的頁數</p>
          <p>4.調用CDC::StartDoc開始打印</p>
          <p>5.用CDC::StartPage開始打印一頁</p>
          <p>6.調用視圖的OnDraw()方法打印輸出一頁內容</p>
          <p>7.用CDC::EndPage結束一頁的打印</p>
          <p>8.循環輸出全部內容</p>
          <p>9.用CDC::EndDoc結束打印</p>
          <p>10.視圖作打印的清理工作</p>
          <p>  框架的打印文檔功能是從OnPreparePrinting(CPrintInfo* pInfo)開始的,在缺省的情況下,它只是簡單的調用視圖的DoPreparePrinting()函數。DoPreparePrinting()顯示Print對話框,并創建與打印機相匹配的設備上下文。如果要想改變打印機初始設置,可以在這里改。缺省設置下,使用1作為第一頁編號(注意:打印的頁號是從1開始編號而不是0),用0xFFFF作為文檔的最后一頁編號。因為Draw要求分兩頁打印輸出,因此要在這里設置打印頁數。要設置打印頁數,可以調用CPrintInfo::SetMaxPage(nMaxPage)。同時還將預覽頁數也設置為兩頁。</p>
          <p>BOOL CDrawView::OnPreparePrinting(CPrintInfo* pInfo)</p>
          <p>{</p>
          <p><b> </b></p>
          <b> 
          <p>pInfo-&gt;SetMaxPage(2); // the document is two pages long:</p>
          <p>// the first page is the title page</p>
          <p>// the second is the drawing</p>
          <p>BOOL bRet = DoPreparePrinting(pInfo); // default preparation</p>
          <p>pInfo-&gt;m_nNumPreviewPages = 2; // Preview 2 pages at a time</p>
          <p>// Set this value after calling DoPreparePrinting to override</p>
          <p>// value read from .INI file</p>
          <p>return bRet;</p>
          </b> 
          <p>}</p>
          <p>  DoPreparePrinting顯示Print對話框。返回時,CPrintInfo結構包含了用戶所指定的值,包括起止頁號、最大頁號、最小頁號等。</p>
          <p>  OnBeginPrinting()在OnPreparePrinting()被調用之后實際打印之前調用。OnBeginPrinting()用于分配GDI資源,這里使用缺省行為。</p>
          <p>  OnPrepareDC用作屏幕顯示時,在繪圖前調整DC。在用于打印時,OnPrepareDC也完成類似功能。</p>
          <p>  OnPrint完成真正的打印一頁文檔的工作。它把一個打印機設備上下文傳給OnDraw,由OnDraw負責打印輸出。可以把那些適合于打印但是不適合于屏幕輸出的工作,如打印頁眉和頁腳,放在OnPrint()的重載中完成,然后再調用OnDraw完成打印和顯示都需要的工作。現在,我們就在OnPrint中加入打印頁眉和頁腳的代碼。OnPrint不是由AppWizard自動生成的,首先要用ClassWizard為CDrawView增加OnPrint()方法。然后添加繪圖程序的特殊打印代碼,見清單8.10。</p>
          <p><b> </b></p>
          <b> 
          <p>清單8.10 OnPrint()成員函數</p>
          </b> 
          <p>void CDrawView::OnPrint(CDC* pDC, CPrintInfo* pInfo) </p>
          <p>{</p>
          <p><b> </b></p>
          <b> 
          <p>// TODO: Add your specialized code here and/or call the base class</p>
          <p>if (pInfo-&gt;m_nCurPage == 1) // page no. 1 is the title page</p>
          <p>{</p>
          <p>PrintTitlePage(pDC, pInfo);</p>
          <p>return; // nothing else to print on page 1 but the page title</p>
          <p>}</p>
          <p>CString strHeader = GetDocument()-&gt;GetTitle();</p>
          <p>PrintPageHeader(pDC, pInfo, strHeader);</p>
          <p>// PrintPageHeader() subtracts out from the pInfo-&gt;m_rectDraw 
            the</p>
          <p>// amount of the page used for the header.</p>
          <p>pDC-&gt;SetWindowOrg(pInfo-&gt;m_rectDraw.left,-pInfo-&gt;m_rectDraw.top);</p>
          <p>// Now print the rest of the page</p>
          <p>OnDraw(pDC); </p>
          </b> 
          <p>}</p>
          <p>  OnPrint()首先根據CPrintInfo類型的pInfo中m_nCurPage(保存當前打印頁號信息)判斷當前打印的是不是第一頁。如果是第一頁,就打印輸出封面。否則,首先調用PrintPageHeader打印頁眉。然后用SetWindowOrg調整打印輸出原點位置。m_rectDraw又是CPrintInfo結構的一個重要數據成員,它保存的是打印輸出的矩形邊界。最后將與打印機匹配的設備上下文傳給OnDraw,由OnDraw在打印機上輸出。注意這里使用的映射模式為MM_LOENGLISH,它的y軸方向是向上遞增的。</p>
          <p>  PrintTitlePage打印輸出文檔的封面。它首先定義一種邏輯字體,設置邏輯字體屬性,然后由調用CreateFontIndirect由邏輯字體創建字體。SetTextAlign(TA_CENTER)將文本設置為居中輸出。然后調用TextOut在打印矩形m_rectDraw上輸出封面。PrintTitlePage函數定義見清單8.11。</p>
          <p><b> </b></p>
          <b> 
          <p>清單8.11 PrintTitlePage成員函數</p>
          <p>void CDrawView::PrintTitlePage(CDC* pDC, CPrintInfo* pInfo)</p>
          <p>{</p>
          <p>// Prepare a font size for displaying the file name</p>
          <p>LOGFONT logFont;</p>
          <p>memset(&amp;logFont, 0, sizeof(LOGFONT));</p>
          <p>logFont.lfHeight = 75; // 3/4th inch high in MM_LOENGLISH</p>
          <p>// (1/100th inch)</p>
          <p>CFont font;</p>
          <p>CFont* pOldFont = NULL;</p>
          <p>if (font.CreateFontIndirect(&amp;logFont))</p>
          <p>pOldFont = pDC-&gt;SelectObject(&amp;font);</p>
          <p>// Get the file name, to be displayed on title page</p>
          <p>CString strPageTitle = GetDocument()-&gt;GetTitle();</p>
          <p>// Display the file name 1 inch below top of the page,</p>
          <p>// centered horizontally</p>
          <p>pDC-&gt;SetTextAlign(TA_CENTER);</p>
          <p>pDC-&gt;TextOut(pInfo-&gt;m_rectDraw.right/2, -100, strPageTitle);</p>
          <p>if (pOldFont != NULL)</p>
          <p>pDC-&gt;SelectObject(pOldFont);</p>
          <p>}</p>
          </b> 
          <p>PrintPageHeader在頁眉位置輸出文件名,然后從m_rectDraw扣除頁眉的大小。</p>
          <p><b> </b></p>
          <b> 
          <p>void CDrawView::PrintPageHeader(CDC* pDC, CPrintInfo* pInfo,</p>
          <p>CString&amp; strHeader)</p>
          <p>{</p>
          <p>// Print a page header consisting of the name of</p>
          <p>// the document and a horizontal line</p>
          <p>pDC-&gt;SetTextAlign(TA_LEFT);</p>
          <p>pDC-&gt;TextOut(0,-25, strHeader); // 1/4 inch down</p>
          <p>// Draw a line across the page, below the header</p>
          <p>TEXTMETRIC textMetric;</p>
          <p>pDC-&gt;GetTextMetrics(&amp;textMetric);</p>
          <p>int y = -35 - textMetric.tmHeight; // line 1/10th inch below text</p>
          <p>pDC-&gt;MoveTo(0, y); // from left margin</p>
          <p>pDC-&gt;LineTo(pInfo-&gt;m_rectDraw.right, y); // to right margin</p>
          <p>// Subtract out from the drawing rectange the space used by the header.</p>
          <p>y -= 25; // space 1/4 inch below (top of) line</p>
          <p>pInfo-&gt;m_rectDraw.top += y;</p>
          </b> 
          <p><b>}</b></p>
          <p>   作為一個練習,讀者可以修改OnPrint()并增加一個PrintPageFooter()函數,在每一頁的頁腳處輸出打印的頁號。注意調用OnDraw之前,要從m_rectDraw中扣除頁腳的高度。</p>
          <div align="center">
            <center>
              <table border="0" cellpadding="0" cellspacing="0" width="615">
                <tr> 
                  <td><a href="../chap2/chap2_4.htm">上一頁</a></td>
                  <td>
                    <p align="right"><a href="../chap2/chap2_6.htm">下一頁</a>
                  </td>
                </tr>
              </table>
              <p><a href="http://www.cpcw.com">電腦報首頁</a> <a href="../../index.htm">網絡學院首頁</a></p>
            </center>
          </div>
          <font size="5">
          <hr noshade color="#3973DE" size="1">
          </font>
          <p align="center"><font size="5"></font><font size="2" color="#000000">本教程由<a href="http://vcdynasty.yeah.net">Visual 
            C++王朝(Where programmers come together)</a>協助制作<br>
            未經許可,請勿以任何形式復制</font> 
        </td>
      </tr>
    </table>
    </center>
</div>

</body>
</html>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲蜜臀av乱码久久精品| 日韩黄色免费网站| 日韩精品综合一本久道在线视频| 成人美女视频在线观看| 国产精品一区二区久久精品爱涩 | 国产成人亚洲综合色影视| 人妖欧美一区二区| 日韩国产一二三区| 日本欧美一区二区| 九色综合狠狠综合久久| 国内精品免费在线观看| 懂色av中文字幕一区二区三区| 国产中文字幕一区| 成人精品国产福利| 在线亚洲免费视频| 91麻豆精品国产91久久久久久久久| 欧美剧情片在线观看| 最新中文字幕一区二区三区 | 亚洲品质自拍视频网站| 亚洲天天做日日做天天谢日日欢| 亚洲精品一二三| 日韩av电影免费观看高清完整版 | 久久久久国产精品麻豆| 国产亚洲欧洲997久久综合| 国产女人18毛片水真多成人如厕| 欧美高清在线精品一区| 亚洲影视在线播放| 日本美女一区二区| 成人午夜电影久久影院| 欧美在线综合视频| 久久一夜天堂av一区二区三区 | 色94色欧美sute亚洲13| 91久久精品国产91性色tv| 91精品在线一区二区| 久久久激情视频| 亚洲女女做受ⅹxx高潮| 久久成人麻豆午夜电影| 成人性生交大片免费看中文网站| 在线观看精品一区| 日韩精品一区二区三区视频播放| 亚洲视频一区二区免费在线观看 | 中文字幕av在线一区二区三区| 亚洲色图视频免费播放| 久久精品国产免费看久久精品| 99精品欧美一区二区三区小说 | 国产精品99久久久| 欧美日韩久久一区二区| 国产精品视频第一区| 日本亚洲三级在线| 色偷偷一区二区三区| 久久久精品人体av艺术| 丝袜a∨在线一区二区三区不卡| 国产99久久久国产精品免费看| 91亚洲国产成人精品一区二区三 | 国产精品一区二区三区99 | 亚洲国产精品麻豆| 成人午夜电影小说| 亚洲精品在线观看网站| 亚洲高清免费观看| 91美女蜜桃在线| 国产欧美日韩不卡免费| 美洲天堂一区二卡三卡四卡视频| 色哟哟一区二区| 日本一二三不卡| 国产高清不卡一区二区| 精品福利在线导航| 免费人成在线不卡| 欧美一区二区网站| 日韩精品亚洲一区| 欧美一区在线视频| 三级精品在线观看| 宅男在线国产精品| 亚洲电影视频在线| 欧美日韩国产成人在线91| 亚洲美女淫视频| 色婷婷综合久久久久中文| 亚洲欧美另类综合偷拍| 色视频成人在线观看免| 亚洲一区在线看| 欧美午夜精品一区| 午夜成人免费电影| 欧美高清一级片在线| 日本亚洲视频在线| 日韩精品影音先锋| 精品一区二区免费在线观看| 亚洲精品在线电影| 国产精品88av| 亚洲精品va在线观看| 欧美日韩午夜影院| 久久精品国产久精国产| 久久久久久久久久久久久女国产乱| 国产成人午夜精品5599 | 欧美一区二区三区日韩视频| 五月激情综合色| 久久婷婷综合激情| 欧美电影免费观看完整版| 亚洲午夜视频在线| 久久久久久综合| 97se亚洲国产综合自在线不卡| 亚洲欧美日韩小说| 欧美精品日韩综合在线| 国产一区视频导航| 亚洲另类中文字| 日韩精品一区二区在线| 成人av在线影院| 亚洲成av人**亚洲成av**| 欧美成人精品福利| 不卡电影一区二区三区| 免费成人美女在线观看| 国产精品久久久爽爽爽麻豆色哟哟| 在线区一区二视频| 蓝色福利精品导航| 一区二区三区在线视频播放| 日韩一区和二区| 91久久线看在观草草青青| 久久国内精品自在自线400部| 亚洲国产电影在线观看| 在线综合视频播放| 91伊人久久大香线蕉| 激情综合网av| 五月婷婷另类国产| 国产精品嫩草影院com| 欧美福利电影网| 91同城在线观看| 国模套图日韩精品一区二区| 亚洲一区av在线| 亚洲视频小说图片| 国产欧美日韩不卡| 日韩精品一区二区三区视频| 欧美午夜在线一二页| 波多野结衣欧美| 国产91精品一区二区麻豆亚洲| 天天综合色天天| 一区二区三区产品免费精品久久75| 欧美色区777第一页| 99精品偷自拍| 国内精品第一页| 亚洲一卡二卡三卡四卡无卡久久 | 在线看国产一区二区| 国产精华液一区二区三区| 视频一区欧美精品| 夜夜精品视频一区二区| 亚洲国产高清在线观看视频| 久久久精品免费网站| 久久久99久久| 国产欧美综合在线观看第十页| 欧美精品一区二区精品网| 91精品在线麻豆| 日韩午夜精品电影| 精品久久久三级丝袜| 欧美成人一级视频| 久久品道一品道久久精品| 久久久噜噜噜久噜久久综合| 久久久777精品电影网影网 | 色94色欧美sute亚洲线路一ni| 精品噜噜噜噜久久久久久久久试看| 欧美一区二区二区| 欧美人与z0zoxxxx视频| 日韩亚洲欧美在线| 欧美丰满少妇xxxbbb| 久久99九九99精品| 国产精品久久久久久久久免费相片| 国产亚洲va综合人人澡精品| 久久蜜桃一区二区| 国产蜜臀97一区二区三区| 国产精品视频你懂的| 亚洲欧美一区二区三区极速播放| 亚洲欧洲色图综合| 亚洲黄色录像片| 日韩和的一区二区| 人人超碰91尤物精品国产| 国产成人综合网站| 99精品欧美一区二区三区小说| 欧洲一区在线电影| 在线播放欧美女士性生活| 欧美电影在线免费观看| 久久综合九色欧美综合狠狠| 国产亲近乱来精品视频| 亚洲欧美在线视频观看| 天天操天天色综合| 国产成人精品一区二| 91麻豆成人久久精品二区三区| 欧美日韩在线播放| 欧美高清视频不卡网| 国产精品美女一区二区三区 | 欧美mv和日韩mv的网站| 国产日产欧美精品一区二区三区| 麻豆久久一区二区| 成人国产亚洲欧美成人综合网| 欧美在线观看你懂的| 久久色.com| 亚洲精品大片www| 国产乱码精品1区2区3区| 91豆麻精品91久久久久久| 精品国产91乱码一区二区三区| 中文字幕一区二区三区在线不卡 | 欧美xxxxxxxx| 亚洲精品中文在线影院| 蜜桃视频一区二区三区在线观看| jizz一区二区|