Creating a Printer Device Context

An application can create a printer device context in one of two ways:

·Calling the PrintDlg function to display a common dialog box that allows the user to specify printer options, then creating a printer device context by using those options.

·Creating a printer device context by using the default printer data from the WIN.INI file.

This section contains code demonstrating the latter method.

To use the default printer, retrieve and parse the appropriate string from the WIN.INI file. This string is retrieved by calling the GetProfileString function and specifying the appropriate section and entry names. In the case of the default printer, this data is stored in the [windows] section and identified by the entry named device. The seventh line in the following excerpt from a WIN.INI file shows an entry for a Kodak® Diconix™ printer.

[windows]

load=

run=

Beep=yes

Spooler=yes

NullPort=None

device=Diconix,winspool,LPT1:

CoolSwitch=1

BorderWidth=3

KeyboardSpeed=31

InitialKeyboardIndicators=2

CursorBlinkRate=530

DoubleClickSpeed=686

Programs=com exe bat pif cmd

Documents=

DeviceNotSelectedTimeout=15

TransmissionRetryTimeout=45

swapdisk=

NetWarn=1

fPromptOnVerbose=FALSE

fPromptOnWarning=FALSE

fPromptOnError=TRUE

fPrintVerbose=FALSE

fPrintFileLine=FALSE

shell=

ScreenSaveTimeOut=300

ScreenSaveActive=0

DebugOptions=2048

The following example shows how a printer device context was created by using the data from WIN.INI.

HDC hdcPrint; /* printer DC handle */

char szDevString[120]; /* array for WIN.INI data */

char *szPrinter, *szDriver; /* printer and driver names */

char *szPort; /* port name */

/*

* Retrieve the printer, printer-driver, and

* output-port names from WIN.INI.

*/

GetProfileString("windows", "device", ",,,",

szDevString, 120);

/*

* Parse the string of names, setting ptrs

* as required. If the string contains the

* required names, use them to create a

* device context.

*/

if ((szPrinter = strtok(szDevString,

(const char *) ","))

&& (szDriver = strtok ((char *) NULL,

(const char *) ", "))

&& (szPort = strtok ((char *) NULL,

(const char *) ", ")))

hdcPrint = CreateDC(szDriver, szPrinter,

szPort, NULL);

/*

* Print a test page that contains the string

* "PRINTER TEST" in the upper left corner.

*/

Escape(hdcPrint, STARTDOC, 8, "Test-Doc", NULL);

TextOut(hdcPrint, 50, 50, "PRINTER TEST", 12);

Escape(hdcPrint, NEWFRAME, 0, NULL, NULL);

Escape(hdcPrint, ENDDOC, 0, NULL, NULL);

/* Delete the printer DC. */

DeleteDC(hdcPrint);