What's New
Q & A
Tip Jar
C# Helper...
Follow VBHelper on Twitter
MSDN Visual Basic Community
TitlePrint a form's image in VB.NET
DescriptionThis example shows how to print a form's image in VB.NET. It makes a Bitmap, uses BitBlt to copy the form's image into it, and prints the result.
Keywordsprint screen, screen capture, form image, print form image
CategoriesGraphics, VB.NET
When the user clicks the Print button, the program calls the GetFormImage subroutine to make a Bitmap holding an image of the form's contents. It saves the result in a global variable. It then creates a PrintDocument object and calls its Print method to print the result.

Subroutine GetFormImage gets a Graphics object for the form. It makes a Bitmap big enough to hold the image and gets a Graphics object for it. It then gets the device context handles (hDC) for the two Graphics objects and uses BitBlt to copy the form's image into the Bitmap.

The PrintDocument's Print method uses the DrawImage method to draw the form's picture centered on the printout.

Private Declare Auto Function BitBlt Lib "gdi32.dll" (ByVal _
    hdcDest As IntPtr, ByVal nXDest As Integer, ByVal _
    nYDest As Integer, ByVal nWidth As Integer, ByVal _
    nHeight As Integer, ByVal hdcSrc As IntPtr, ByVal nXSrc _
    As Integer, ByVal nYSrc As Integer, ByVal dwRop As _
    System.Int32) As Boolean
Private Const SRCCOPY As Integer = &HCC0020

' Variables used to print.
Private m_PrintBitmap As Bitmap
Private WithEvents m_PrintDocument As PrintDocument

' Print the picture.
Private Sub btnPrint_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles btnPrint.Click
    ' Copy the form's image into a bitmap.
    m_PrintBitmap = GetFormImage()

    ' Make a PrintDocument and print.
    m_PrintDocument = New PrintDocument
End Sub

Private Function GetFormImage() As Bitmap
    ' Get this form's Graphics object.
    Dim me_gr As Graphics = Me.CreateGraphics

    ' Make a Bitmap to hold the image.
    Dim bm As New Bitmap(Me.ClientSize.Width, _
        Me.ClientSize.Height, me_gr)
    Dim bm_gr As Graphics = me_gr.FromImage(bm)
    Dim bm_hdc As IntPtr = bm_gr.GetHdc

    ' Get the form's hDC. We must do this after 
    ' creating the new Bitmap, which uses me_gr.
    Dim me_hdc As IntPtr = me_gr.GetHdc

    ' BitBlt the form's image onto the Bitmap.
    BitBlt(bm_hdc, 0, 0, Me.ClientSize.Width, _
        Me.ClientSize.Height, _
        me_hdc, 0, 0, SRCCOPY)

    ' Return the result.
    Return bm
End Function

' Print the form image.
Private Sub m_PrintDocument_PrintPage(ByVal sender As _
    Object, ByVal e As _
    System.Drawing.Printing.PrintPageEventArgs) Handles _
    ' Draw the image centered.
    Dim x As Integer = e.MarginBounds.X + _
        (e.MarginBounds.Width - m_PrintBitmap.Width) \ 2
    Dim y As Integer = e.MarginBounds.Y + _
        (e.MarginBounds.Height - m_PrintBitmap.Height) \ 2
    e.Graphics.DrawImage(m_PrintBitmap, x, y)

    ' There's only one page.
    e.HasMorePages = False
End Sub
This method copies only the form's client area. To include the window decoration (borders, title bar, system menu, and system buttons), see this example.
Copyright © 1997-2010 Rocky Mountain Computer Consulting, Inc.   All rights reserved.