2010-01-12 2 views
1

C++로 작성된 COM 구성 요소에 인쇄 기능이 있습니다. 이 인쇄 기능은 프린터 hDC를 인쇄에 사용할 모든 설정을 포함하는 매개 변수로 사용합니다. 이전에는 VB6 코드에서 호출되었으며 Printer.hdcPrinter 개체의 모든 항목을 설정 한 후에 여기에서 작동합니다.프린터를 얻는 방법 HDC

코드가 VB6에서 VB.NET으로 변환되었으므로 필요한 작업을 대부분 알아 냈습니다. 이전 프린터 개체는 Microsoft.VisualBasic.PowerPacks.Printing.Compability.VB6.Printer 클래스를 통해 사용할 수 있지만 이전 hdc 속성은 여기에서 지원되지 않습니다.

아무도이 hdc를 얻을 수있는 방법을 말해 줄 수 있습니까? System.Drawing.Printing.PrinterSettings 개체에서이 hdc가 GetHdevmode()과 같습니까?

답변

2

PrinterSettings.CreateMeasurementGraphics()에서 반환 한 Graphics 객체 중 하나를 가져올 수 있습니다. Graphics.GetHdc() 메서드를 사용하십시오. 인쇄 후 ReleaseHdc()를 잊지 마십시오.

+0

내가 만든 새로운'PrinterSettings'

그런 다음 (예를 들어) 인쇄 페이지를 처리하기 위해 다음 코드를 추가합니다 객체이기 때문에 이전에 값을 설정 한 호환성'Printer' 객체의 값으로 실제로 초기화되었습니다. 따라서'Printer.hdc'를 호출하는 것과 같은 효과가 있습니다! 감사합니다. – awe

1

Hdc는 getdevmode와 같지 않지만 hdc를 사용하지 않고 .net에서 모든 것을 할 수 있습니다. 이전 코드를 사용하여 시간을 절약하면 그래픽 객체에서 hdc를 가져 와서 nobugz의 대답과 같이 사용할 수 있습니다. 그러나 프린터 용 그래픽 객체가있는 경우 그래픽 객체에 직접 그려서 hdc를 건너 뛰는 것이 더 간단 할 수 있습니다.

0

suggested by Hans과 비슷한 접근 방식이지만 양식 컨트롤을 사용합니다. 어쨌든 양식 컨트롤을 사용하는 경우 더 깨끗한 접근 방식 일 수 있습니다.

Windows Forms 도구 상자의 PrintDocument을 양식에 배치하십시오.

Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage 
    Dim printerhdc As IntPtr = e.Graphics.GetHdc() 

    ' Do whatever you need to do to get the right image 
    XYZ.Load file(currentpagenumber) 
    XYZ.Render(printerhdc.ToInt64, 25, 25, Width, Height) 

    CurrentPageNumber += 1 

    If CurrentPageNumber < TotalPageCount Then 
    e.HasMorePages = True 
    Else 
    e.HasMorePages = False 
    End If 
    e.Graphics.ReleaseHdc(printerhdc) 
End Sub 

... 

'Gather all the files you need and put their names in an arraylist. 
'Then issue the print command 
PrintDocument1.Print 

' You've just printed your files 

소스 : http://www.vbforums.com/showthread.php?247493-Good-ol-Printer-hDC

(출처 : http://www.vbforums.com/showthread.php?247493-Good-ol-Printer-hDC)

관련 문제