Creating a Printer Device Context

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

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