Microsoft KB Archive/162609

= How To Create a Printer Device Context (DC) in MFC =

Article ID: 162609

Article Last Modified on 11/21/2006

-

APPLIES TO

 Microsoft Foundation Class Library 4.2, when used with:  Microsoft Visual C++ 1.52 Professional Edition

 Microsoft Visual C++ 2.0 Professional Edition

 Microsoft Visual C++ 2.1

 Microsoft Visual C++ 2.2</li></ul>

 Microsoft Visual C++ 4.0 Standard Edition</li></ul>

 Microsoft Visual C++ 4.1 Subscription</li></ul>

 Microsoft Visual C++ 4.2 Professional Edition</li></ul> </li></ul>

-

<div class="notice_section">

This article was previously published under Q162609

<div class="summary_section">

SUMMARY
When you create a printer device context (DC) in Windows SDK programming, an application must retrieve ::CreateDC's parameters (such as driver name, device name and output port) from either a Win.ini file (16-bit) or a Windows registry (32-bit). In Microsoft Foundation Classes, this can be done via a call to functions CWinApp::GetPrinterDeviceDefaults and CPrintDialog::CreatePrinterDC.

This article shows you a way to create a printer device context using the default selected printer without displaying the Print dialog box. To create a printer device context for a non-default printer, please refer to Chapter 15 of "Programming Windows 3.1" by Charles Petzold.

<div class="moreinformation_section">

MORE INFORMATION
The CWinApp::GetPrinterDeviceDefaults expects a PRINTDLG structure to be passed in such a way that the data retrieved can be stored in the DEVMODE and DEVNAMES handles of the structure. Those data are then used to create a printer DC in the CPrintDialog::CreatePrinterDC function.

Since CreatePrinterDC and m_pd (a PRITNDLG variable) are member function and member variable of the CPrintDialog class, a CPrintDialog variable is defined and used in the following sample code.

Sample Code
// Instantiate a CPrintDialog object. CPrintDialog dlg(FALSE);

// Retrieve the current printer defaults from the Windows .ini file // as necessary, or uses the last printer configuration set by the // user in Print Setup. CWinApp* app = AfxGetApp; if (!app->GetPrinterDeviceDefaults(&dlg.m_pd)) {   // Fails to create a printer device context for printing because // no printer is being installed. Bring up dialog box to alert the // users that they need to install a printer. This step is optional. if (app->DoPrintDialog(&dlg) != IDOK) return ; }

// Creates a printer DC from the DEVMODE and DEVNAMES structures. if (dlg.CreatePrinterDC == NULL) return ;

// A printer device context (DC) has been created. // Attach it to a CDC object. The DC is deleted when the CDC // object goes out of scope. CDC PrintDC; PrintDC.Attach(dlg.m_pd.hDC);

// ADD YOUR CODE HERE.

<div class="references_section">