2009-06-03 3 views
0

작성한 보고서 컨트롤에 대해 CDC를 인쇄하면 용지에 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 제곱 인치를 차지한다는 것을 의미합니다. 그러나 이미지를 가져 와서 600DPI 프린터에서 인쇄하면 이미지 크기는 약 1/6 "1/6"- 훨씬 작아집니다. 이것은 출판 세계의 단점입니다. 디스플레이에서 잘 보이는 이미지는 종종 인쇄 할 때 작거나 끔직합니다.

제안 된 것처럼 BitBlt 대신 StretchBlt를 사용하여 이미지 크기를 조정할 수 있습니다. 디스플레이와 프린터의 차이에 따라 약간 뭉툭하게 보일 수도 있고 완전히 뭉툭하게 보일 수도 있습니다.

더 나은 옵션은 장치 컨텍스트 (및 일부 좌표)를 가져 와서 그 안에 드로잉하는 메서드를 갖도록 컨트롤 그리기를 수행하는 코드를 다시 작성하는 것입니다. 일반 윈도우 페인팅 코드는 메모리 DC를이 루틴에 전달한 다음 결과를 창에 BitBlt하여 페인팅 코드는 프린터 DC 및 일부 적합한 좌표로이 메서드를 호출 할 수 있습니다.

이 루틴을 작성할 때 스케일링에 대해 걱정해야합니다. 예를 들어 주어진 장치 컨텍스트에 대한 글꼴을 만들고 배율 조정 독립 실행 파일 크기로 포인트를 지정해야합니다 (즉, 포인트 단위로 글꼴 크기를 지정하십시오 , 픽셀이 아닌) 미리 만들어진 글꼴에 의존하는 것이 아닙니다.

+0

이 작품은 작은 외관에 대한 이유는 인쇄 직류가 화면 DC보다 더 많은 픽셀을 가지고 있다는 것입니다. 이 때문에 모든 글꼴 크기가 인쇄시 작게 나타납니다. 따라서 필자는 인쇄용 DC를 통과하는 새로운 글꼴 크기를 사용하여 인쇄 할 드로잉 논리를 작성했습니다. 이렇게하면 전체 페이지가 거의 필요했습니다. 고맙습니다. –

+0

큰 글꼴을 사용하는 것은 사실 더 큰 그림을 그리는 올바른 방법이 아닙니다. 올바른 방법은 DC에 적합한 매핑 모드와 뷰포트를 설정하는 것입니다. CDC :: SetMapMode() 및 :: SetWindowExtEx() 함수를 살펴보십시오. –

0

보고서의 크기를 프린터의 해상도로 조정하지 않았다고 가정합니다. 일반적인 화면 해상도는 72 DPI (때때로 96 DPI)입니다. 프린터 해상도는 300DPI, 600DPI 이상일 수 있습니다.

모든 좌표와 크기가 프린터의 해상도로 조정 된 보고서를 프린터 DC에 다시 그려야합니다.

0

프린터의 화면 너비가 화면보다 많습니다. 인쇄 된 페이지에 맞게 크기를 조정해야합니다.

BitBlt() 대신 StretchBlt()를 사용해보십시오.

관련 문제