DOCUMENT:Q162609 11-SEP-2001 [visualc] TITLE :HOWTO: Create a Printer Device Context (DC) in MFC PRODUCT :Microsoft C Compiler PROD/VER::1.52,2.0,2.1,2.2,4.0,4.1,4.2 OPER/SYS: KEYWORDS:kbcode kbprint kbMFC kbPrinting kbVC kbVC200 kbVC400 kbVC420 kbGrpDSMFCATL ====================================================================== ------------------------------------------------------------------------------- The information in this article applies to: - The Microsoft Foundation Classes (MFC), used with: - Microsoft Visual C++ for Windows, 16-bit edition, version 1.52 - Microsoft Visual C++, 32-bit Editions, versions 2.0, 2.1, 2.2, 4.0, 4.1, 4.2 ------------------------------------------------------------------------------- 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. 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. REFERENCES ========== "Programming Windows 3.1," Charles Petzold, Chapter 15, Microsoft Press, 1992 Additional query words: 2.00 2.10 2.20 4.00 4.10 4.20 1.50 1.51 1.00 2.50 2.51 2.52 3.00 3.10 3.20 ====================================================================== Keywords : kbcode kbprint kbMFC kbPrinting kbVC kbVC200 kbVC400 kbVC420 kbGrpDSMFCATL Technology : kbAudDeveloper kbMFC Version : :1.52,2.0,2.1,2.2,4.0,4.1,4.2 Issue type : kbhowto ============================================================================= THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY. Copyright Microsoft Corporation 2001.