Editor's Note: This article's code has been updated to work with the final release of the .Net framework.
Those of you who have done any programming with the Win32 API will be familiar with the concept of the Device Context, also known as the "DC". A Device Context allows a developer to draw things like text, lines, rectangles, curves, etc. on both the screen and the printer, or even in memory in preparation for later drawing to either of these devices. This was a pretty powerful arrangement that allowed a developer who knew how to draw application output on the screen to draw application output on a printer.
With .NET, we're given a variety of graphics classes that eventually allow drawing of certain graphics primitives onto device contexts. This article describes how we can build an application that is capable of printing its output on a printer installed on the computer, allow the adjustment of page and printer settings and also provide a print preview.