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);