Как я могу получить принтер HDC - PullRequest
1 голос
/ 12 января 2010

У меня есть COM-компонент, написанный на C ++, который имеет функцию Print. Эта функция печати принимает значение постоянного тока принтера в качестве параметра, который включает в себя все настройки, используемые для печати. Ранее это вызывалось из кода VB6, и Printer.hdc работал бы здесь после установки всего для объекта Printer.

Код был преобразован из VB6 в VB.NET, и я выяснил большинство вещей, которые мне нужно сделать. Старый объект Printer доступен через класс Microsoft.VisualBasic.PowerPacks.Printing.Compability.VB6.Printer, но старое свойство hdc здесь не поддерживается.

Может кто-нибудь сказать мне, как получить этот HDC? Это hdc такой же, как GetHdevmode() на System.Drawing.Printing.PrinterSettings объекте?

Ответы [ 3 ]

2 голосов
/ 12 января 2010

Вы можете получить один из объекта Graphics, возвращенного PrinterSettings.CreateMeasurementGraphics (). Используйте метод Graphics.GetHdc (). Не забудьте ReleaseHdc () после печати. ​​

1 голос
/ 13 января 2010

Hdc отличается от getdevmode, но вы можете делать все в .net без использования hdc. Если это экономит время, используя старый код, вы можете получить hdc из графического объекта и использовать его, как в ответе nobugz. Но если у вас есть графический объект для принтера, может быть проще нарисовать непосредственно графический объект и вообще пропустить hdc.

0 голосов
/ 05 декабря 2017

Вот подход, аналогичный , предложенному Гансом , но он использует элемент управления формой. Если вы все равно используете элемент управления формой, это может быть более чистый подход.

Поместите PrintDocument из панели инструментов Windows Forms в форму.

Затем добавьте следующий код для обработки страницы печати (в качестве примера):

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)

...