2009-06-03 12 views
0

私が作成したレポートコントロールのCDCを印刷すると、紙の上に1平方インチ未満の小さいものが表示されます。ページ全体を占有するようにレポートを印刷するにはどうすればよいですか? つまり、レポート全体を1つの印刷ページに表示するにはどうすればよいですか。印刷されたCDCが紙の上に小さい

CPrintDialog printDialog(FALSE); printDialog.DoModal();

CDC dcPrint; 
if(dcPrint.Attach(printDialog.GetPrinterDC())) 
{ 
    int iHorzRes = dcPrint.GetDeviceCaps(HORZRES); 
    int iVertRes = dcPrint.GetDeviceCaps(VERTRES); 

    int iHorzResCDC = m_CDC.GetDeviceCaps(HORZRES); 
    int iVertResCDC = m_CDC.GetDeviceCaps(VERTRES); 

    dcPrint.m_bPrinting = TRUE; 
      dcPrint.BitBlt(0,0, iHorzRes, iVertRes, &m_CDC, iHorzResCDC, iVertResCDC, SRCCOPY); 
    CFont* pOldFont = dcPrint.SelectObject(&m_HeaderFont); 
    dcPrint.TextOut(0,0,"HelloWorld")  ; 
    dcPrint.SelectObject(pOldFont); 

    CPrintInfo printInfo; 
    printInfo.m_rectDraw.SetRect(0,0, iHorzRes, iVertRes); 
    dcPrint.StartDoc("Report Print");  
    dcPrint.StartPage(); 
    if(dcPrint.EndPage()) 
     dcPrint.EndDoc(); 
    else 
     dcPrint.AbortDoc();  
} 

dcPrint.DeleteDC(); 

m_CDCは、私は、画面上のレポート全体をバッファリングして表示するために使用するメモリDCです。

答えて

2

これは、一般に、プリンタの表示解像度はディスプレイよりもはるかに高いためです。ディスプレイは通常96〜120DPIです:96DPIでは、96ピクセル(ドット)×96ピクセルの画像がディスプレイ上で約1平方インチを占めることを意味します。しかし、600 DPIプリンタでその画像を印刷して印刷すると、画像のサイズは約1/6 "1/6" - はるかに小さくなります。これは出版業界の悩みです。ディスプレイ上で見た目がよく見える画像は、印刷されると、しばしば小さく見えるか、ひどく見えます。

あなたのイメージを拡大するには、BitBltではなくStretchBltを使用することをお勧めします。ディスプレイとプリンタの違いによっては、少しばらつきがあり、まったくぼんやりとして見えます。

より良いオプションは、デバイスコンテキスト(およびいくつかの座標)を取り込み、その中に描画するメソッドを持つように、コントロールの描画を行うコードを書き直すことです。通常のウィンドウペインティングコードはメモリDCをこのルーチンに渡し、その結果をウィンドウにBitBltし、ペイントコードはプリンタDCといくつかの適切な座標でこのメソッドを呼び出すことができます。

このルーチンを書くときには、スケーリングについて心配する必要があります。例えば、指定されたデバイスコンテキスト用のフォントを作成し、スケーリング - 独立したサイズのフォントを作成する必要があります(つまり、 、ピクセルではありません)、あらかじめ作成されたフォントに頼るのではなく、

+0

この作品は、私は小さな外観の理由は、プリントDCは、画面のDCよりも多くのピクセルがあることを考え出した。このため、フォントサイズはすべて印刷時に小さく表示されます。そこで私は、印刷DCを渡す新しいフォントサイズを使用して印刷するための描画ロジックを書きました。このようにして、ページ全体がほぼ完成しました。 thanx all。 –

+0

大きなフォントを使用することは、実際にはより大きなフォントを描く正しい方法ではありません。適切な方法は、あなたのDCのために正しいマッピングモードとビューポートを設定することです。 CDC :: SetMapMode()と:: SetWindowExtEx()関数を見てください。 –

0

レポートの解像度をプリンタの解像度に合わせていないとします。典型的な画面解像度は72 DPI(時には96 DPI)です。プリンタの解像度は、300DPI、600DPIまたはそれ以上にすることができます。

すべての座標とサイズをプリンタの解像度に合わせて、プリンタDCにレポートを再描画する必要があります。

0

お使いのプリンタの画面は、画面より1インチあたり多くのドットがあります。印刷されたページに合うように拡大縮小する必要があります。

BitBlt()の代わりにStretchBlt()を使用してみてください。

関連する問題