Resolved How do I print windows form to landscape orientation.

gho5t

Member
Joined
Aug 26, 2013
Messages
13
Programming Experience
1-3
Hey all,

Was wondering if anyone could help me with the following code.
The code that I have inputted that won't work is in Red.

The PrintDocument component name is "PrintDocument1"

Imports System.Drawing.PrintingImports System.Drawing.Graphics
Imports System.Drawing.Imaging
Imports System.Runtime.InteropServices


Public Class cutting

Private Sub OnPrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)

PrintDocument1.DefaultPageSettings.Landscape = True
PrintDocument1.PrinterSettings.DefaultPageSettings.Landscape = True



Dim hwndForm As IntPtr
hwndForm = Me.Handle


Dim hdcDIBSection As IntPtr
Dim hdcRef As IntPtr
Dim hbmDIBSection As IntPtr
Dim hbmDIBSectionOld As IntPtr
Dim BMPheader As Win32APICall.BITMAPINFOHEADER


hdcRef = Win32APICall.GetDC(IntPtr.Zero)
hdcDIBSection = Win32APICall.CreateCompatibleDC(hdcRef)
Win32APICall.ReleaseDC(IntPtr.Zero, hdcRef)


BMPheader.biBitCount = 24
BMPheader.biClrImportant = 0
BMPheader.biClrUsed = 0
BMPheader.biCompression = Win32APICall.BI_RGB
BMPheader.biSize = 40
BMPheader.biHeight = Me.Height
BMPheader.biPlanes = 1
BMPheader.biSizeImage = 0
BMPheader.biWidth = Me.Width
BMPheader.biXPelsPerMeter = 0
BMPheader.biYPelsPerMeter = 0


hbmDIBSection = Win32APICall.CreateDIBSection(hdcDIBSection, BMPheader, Win32APICall.DIB_RGB_COLORS, _
IntPtr.Zero, IntPtr.Zero, 0)


hbmDIBSectionOld = Win32APICall.SelectObject(hdcDIBSection, hbmDIBSection)
Win32APICall.PatBlt(hdcDIBSection, 0, 0, Me.Width, Me.Height, Win32APICall.WHITENESS)
Win32APICall.PrintWindow(hwndForm, hdcDIBSection, 0)
Win32APICall.SelectObject(hdcDIBSection, hbmDIBSectionOld)


Dim imageFrm As Bitmap
imageFrm = Image.FromHbitmap(hbmDIBSection)
e.Graphics.DrawImage(imageFrm, 0, 0)


Win32APICall.DeleteDC(hdcDIBSection)
Win32APICall.DeleteObject(hbmDIBSection)
End Sub
Public Class Win32APICall


Public Const DIB_RGB_COLORS = 0
Public Const BI_RGB = 0
Public Const WHITENESS = 16711778


<DllImport("user32.dll", EntryPoint:="PrintWindow", _
SetLastError:=True, CharSet:=CharSet.Unicode, _
ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function PrintWindow(ByVal hWnd As IntPtr, ByVal hDC As IntPtr, ByVal dwFlags As Integer) As UInt32
End Function


<StructLayout(LayoutKind.Sequential, pack:=8, CharSet:=CharSet.Auto)> _
Structure BITMAPINFOHEADER
Dim biSize As Int32
Dim biWidth As Int32
Dim biHeight As Int32
Dim biPlanes As Int16
Dim biBitCount As Int16
Dim biCompression As Int32
Dim biSizeImage As Int32
Dim biXPelsPerMeter As Int32
Dim biYPelsPerMeter As Int32
Dim biClrUsed As Int32
Dim biClrImportant As Int32
End Structure


<DllImport("gdi32.dll", EntryPoint:="CreateDIBSection", _
SetLastError:=True, CharSet:=CharSet.Unicode, _
ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function CreateDIBSection(ByVal hdc As IntPtr, ByRef pbmi As BITMAPINFOHEADER, _
ByVal iUsage As Int32, ByVal ppvBits As IntPtr, ByVal hSection As IntPtr, _
ByVal dwOffset As Int32) As IntPtr
End Function


<DllImport("gdi32.dll", EntryPoint:="PatBlt", _
SetLastError:=True, CharSet:=CharSet.Unicode, _
ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function PatBlt(ByVal hDC As IntPtr, ByVal nXLeft As Int32, _
ByVal nYLeft As Int32, ByVal nWidth As Int32, ByVal nHeight As Int32, _
ByVal dwRop As Int32) As Boolean
End Function


<DllImport("gdi32.dll", EntryPoint:="SelectObject", _
SetLastError:=True, CharSet:=CharSet.Unicode, _
ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function SelectObject(ByVal hDC As IntPtr, ByVal hObj As IntPtr) As IntPtr
End Function


<DllImport("GDI32.dll", EntryPoint:="CreateCompatibleDC", SetLastError:=True, CharSet:=CharSet.Unicode, _
ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function CreateCompatibleDC(ByVal hRefDC As IntPtr) As IntPtr
End Function


<DllImport("GDI32.dll", EntryPoint:="DeleteDC", SetLastError:=True, CharSet:=CharSet.Unicode, _
ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function DeleteDC(ByVal hDC As IntPtr) As Boolean
End Function


<DllImport("GDI32.dll", EntryPoint:="DeleteObject", SetLastError:=True, CharSet:=CharSet.Unicode, _
ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function DeleteObject(ByVal hObj As IntPtr) As Boolean
End Function


<DllImport("User32.dll", EntryPoint:="ReleaseDC", SetLastError:=True, CharSet:=CharSet.Unicode, _
ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function ReleaseDC(ByVal hWnd As IntPtr, ByVal hDC As IntPtr) As Boolean
End Function


<DllImport("User32.dll", EntryPoint:="GetDC", SetLastError:=True, CharSet:=CharSet.Unicode, _
ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function GetDC(ByVal hWnd As IntPtr) As IntPtr
End Function




End Class
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click


Dim prd As PrintDocument
prd = New PrintDocument


AddHandler prd.PrintPage, AddressOf OnPrintPage


prd.Print()
End Sub


End Class

 

JohnH

VB.NET Forum Moderator
Staff member
Joined
Dec 17, 2005
Messages
15,602
Location
Norway
Programming Experience
10+
I can't imagine changing default settings would impact a print job that has already started, try setting them before you print.
 
Top Bottom