How can I capture and Print
the Screen, a Form, or any Window ?
The included example provides
several useful routines for capturing
All of the routines have been written to
work under both 16- and 32-bit
Windows platforms and they contain full
palette support. The routines in
the example can:
- Capture the entire contents of a form.
- Capture the client area of a form.
- Capture the entire screen.
- Capture the active window on the
- Capture any portion of any window given
a handle to it.
- Create a Picture object from a bitmap
and a palette.
- Print a Picture object as large as
possible on the page.
Visual Basic 4.0 introduced a new Picture
object. The Picture object is
actually a standard OLE type and it is
documented in the Control
Developer's Kit (CDK.)
The CDK includes the function
OleCreatePictureIndirect which can be
construct new Picture objects from Visual
Basic 4.0. The routine
CreateBitmapPicture in the example calls
OleCreatePictureIndirect to build
a Picture object from a handle to a
bitmap and a handle to a palette. If
the Picture includes a valid palette,
Visual Basic will know to use it when
rendering the Picture to the screen or
printer. The CreateBitmapPicture
routine is used by the CaptureWindow
routine to construct Picture objects
containing a bitmap of a part or all of a
The CaptureWindow routine in the example
captures any portion of a window
given a window handle. The routine
includes several parameters for
describing the exact portion of the
window to capture. Capture Window works
by copying the on-screen image of a
window into a new bitmap. It also
checks to see if the screen has a palette
and if so it makes a copy of it.
CaptureWindow then calls
CreateBitmapPicture to construct a bitmap
newly created bitmap and palette.
The CaptureForm, CaptureClient,
CaptureScreen, and CaptureActiveWindow
routines included in the example all use
CaptureWindow to capture specific
windows. CaptureForm and CaptureClient
both call Capture window and pass it
the hWnd property of a Form object.
CaptureScreen simply gets the handle to
the desk top window and calls
just gets the window handle of the active
window and calls CaptureWindow.
Once the desired image is captured in a
Picture object, it is easy to print
in Visual Basic 4.0 using the
PaintPicture method of the Printer
The example provides the routine
PrintPictureToFitPage that uses the
PaintPictureMethod to print the captured
images as large as possible in the
printable area of the page.