• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

        VC打印實戰淺談

        VC打印實戰淺談

        更新時間:2022-05-02 文章作者:未知 信息來源:網絡 閱讀次數:

        經常看到VC論壇中一些朋友問關于打印的問題,好多是問過好多遍的,其實搜索一下原來的帖子可以找到好多,而且都是給了正確的解決方法的。但我搜了一下文檔中心,發現好象關于一下我要講的內容的還沒有。所以我決定把自己在做程序時遇到的問題,及實現方法和心得體會寫下來,重在交流。文中如有疏漏之處,請各位朋友及時指出,以免我落個誤人誤己的下場。

        在做打印模塊時,經常會出于不同的目的改變打印機的默認配置。對于打印機配置最重要的一個結構就是DEVMODE結構(結構的具體構成請MSDN),該結構中幾乎包含了打印機的所有配置信息。下面將給出幾個經常要用到的配置項的實現。

        PRINTDLG pd;  //該結構包含打印對話框中的所有信息
        LPDEVMODE  lpDevMode;
        if(AfxGetApp()->GetPrinterDeviceDefaults(&pd)) //獲得默認的打印機的信息
        {
        lpDevMode=(LPDEVMODE)GlobalLock(pd.hDevMode);
        if(lpDevMode)
        {   
          lpDevMode->dmPaperSize=DMPAPER_A4;    //將打印紙設置為A4
          lpDevMode->dmOrientation=DMORIENT_LANDSCAPE; //將打印機設置為橫向打印。
          lpDevMode->dmPrintQuality=600   //打印分辨率為600dpi
        }
        GlobalUnlock(pd.hDevMode);
        }

        其實,看看MSDN中DEVMODE結構的文檔,套用上面這個模式,你就可以隨便配置你的打印機了。如果你想配置完成后,還為用戶顯示打印對話框的話。可以將pd替換為printDlg.m_pd,當然你要事先定義printDlg。實現語言為“CPrintDialog printDlg(FALSE);”。

        下面要講的內容才是我要寫本文的初衷,這是我剛剛解決的問題,在網上貼帖子沒有人能回答的出,所以將它寫出來同各位朋友共享。

        我寫的打印程序,在我的機器上打印正常,可是到了某些機器上打印就不正常了,打印的字體比我的大,整個版面都亂了。這下我可給搞糊涂了,同是一臺打印機,程序中我也設置了映射模式為MM_TEXT,怎么可能出現這種情況呢?后來同事發現了問題的所在,因為打印時采用的分辨率不同。由于我們不同的機器上裝的是不同版本的打印驅動程序,他們默認的打印分辨率也不相同。我的機器上的打印驅動默認的是1200dpi的分辨率,而出問題的打印機的分辨率為600dpi。所以打出來的字體比原來大了兩倍。下面我來分析一下原因:
        WINDOWS中的字體的高度,寬度是用邏輯單元(Logical units)來表示的,邏輯單元本身并不是一種長度單位。但字體可以通過它按照一定的映射模式,經過計算后顯示在不同的設備終端上。比如:有一個高為240個邏輯單元的字體,系統的映射模式為MM_TEXT(即一個邏輯單元對應一個設備像素),那么字體在屏幕的輸出為240個像素高,如果換為其他的映射模式那么它就會在屏幕輸出不同的大小。如果我們改變了顯示器的分辨率,將它的分辨率調高,相應的每個像素大小就會變小。那么再按照MM_TEXT映射模式,將字體顯示在顯示器上,那么此時字體也會比剛才看著小。

        同樣,這中情況也適于打印機,打印機的設備像素是點。1200dpi表示打印機每英寸可以打1200個點。600dpi表示每英寸可以打600個點。顯然對于任何字體,在分辨率為600dpi的打印機上打印的大小是在1200dpi分辨率打印機上打印大小的兩倍。所以為了處理這個問題我設置了一個打印系數,對于所有的打印排版所用的
        參數都乘以這個系數,這樣問題就迎刃而解了。下面是得到打印系數的實現:

        #define PRINT_DPI_DEFAULT 1200 //我調好的程序分辨率為1200dpi
        m_fXCoefficient=1;//初始化打印系數

        PRINTDLG pd;
        LPDEVMODE lpDevMode;
        double  fXDPI=PRINT_DPI_DEFAULT; //

        CPrintDialog printDlg(FALSE);

        if(AfxGetApp()->GetPrinterDeviceDefaults(&pd))
        {
          lpDevMode=(LPDEVMODE)GlobalLock(pd.hDevMode);
          if(lpDevMode)
          {   
           lpDevMode->dmPaperSize=DMPAPER_A4;    
          }
          GlobalUnlock(pd.hDevMode);
        }

        printDlg.m_pd.hDevMode=pd.hDevMode;

        if (printDlg.DoModal() == IDCANCEL)
          return;
          
        fXDPI=(double)lpDevMode->dmPrintQuality;
        if(fXDPI>0)
        {
          m_fXCoefficient=fXDPI/PRINT_DPI_DEFAULT;
        }

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 亚洲视频一区二区| 黄+色+性+人免费| 亚洲av日韩片在线观看| 亚洲欧洲日本在线观看| 德国女人一级毛片免费| 亚洲免费福利在线视频| 天天摸夜夜摸成人免费视频| 亚洲人成人伊人成综合网无码| 午夜男人一级毛片免费| 日韩欧美亚洲中文乱码| 免费国产美女爽到喷出水来视频| 国产午夜亚洲精品不卡电影| 亚洲人成电影网站国产精品| 国产精品美女免费视频观看| 亚洲Av永久无码精品三区在线 | 全亚洲最新黄色特级网站| 羞羞视频免费观看| 国产国拍亚洲精品福利 | 五月婷婷综合免费| 亚洲精品色播一区二区| 亚洲国产中文字幕在线观看| 99热在线日韩精品免费| 亚洲综合久久成人69| 永久免费看mv网站入口| 久久国产精品免费一区二区三区| 亚洲ⅴ国产v天堂a无码二区| 久久久高清免费视频| 国产成人综合亚洲| 亚洲av永久无码精品表情包| 99精品国产免费久久久久久下载| 日本亚洲欧美色视频在线播放 | 免费一级毛片女人图片| 中文字幕版免费电影网站| 亚洲网址在线观看| 亚洲免费日韩无码系列| 99re在线这里只有精品免费| 亚洲AV无码成人精品区日韩 | 精品亚洲456在线播放| 亚洲午夜精品一级在线播放放| 99re6在线精品视频免费播放| 蜜桃传媒一区二区亚洲AV|