Cómo imprimir un documento

Seleccione idioma Seleccione idioma
Id. de artículo: 139652 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo se describen los cada siete pasos necesarios para imprimir un documento en una impresora en la programación de Windows. Tenga en cuenta que mientras que Windows Ce versión 2.0 y posterior proporciona compatibilidad de impresión, debe tener lo siguiente en cuenta:
  • Windows Ce no proporciona compatibilidad para cola o imprimir varias copias.
  • Algunos miembros de estructura PRINTDLG tienen nombres diferentes en Windows Ce.
  • Necesita utilizar el indicador PD RETURNDEFAULTDC en vez de PD RETURNDC PD RETURNDEFAULT.

Más información

  1. Obtenga contexto de dispositivo a una impresora. Para dibujar gráficos o texto en el dispositivo de impresión, una aplicación necesita un contexto de dispositivo de impresora. La función PrintDlg() se puede utilizar para obtener la impresora DC. PrintDlg() puede mostrar un cuadro de Diálogo Imprimir para permitir al usuario seleccionar una impresora o devolver información sobre la impresora predeterminada. Además de otra información sobre la impresora, PrintDlg() devuelve un contexto de dispositivo de impresora en la estructura PRINTDLG cuando se especifica PD_RETURNDC como uno de los indicadores. Este contexto de dispositivo coincide a las selecciones con el usuario realizado en el cuadro de diálogo. Muestra el uso de PrintDlg() que GetPrinterDC funcione en el código de ejemplo al final de este artículo para obtener una impresora DC.

    Desea crear una impresora DC sin mostrar el cuadro de diálogo Imprimir necesita especificar PD_RETURNDEFAULT | PD_RETURNDC se marca como se muestra en el ejemplo del código de este artículo. El indicador PD_RETURNDEFAULT se utiliza para recuperar información sobre la impresora predeterminada sin mostrar el cuadro de diálogo Imprimir. El indicador PD_RETURNDC se utiliza para indicar a PrintDlg que cree automáticamente un contexto de dispositivo o información para la impresora.
  2. Configure la función Abort. Una aplicación debe utilizar la función SetAbortProc a función Abort de conjunto application-defined que permite que un trabajo de impresión se cancele durante la cola de impresión. En la función AbortProc, el procedimiento de anulación puede comprobar el código de error para ver si un error se produjo en imprimir. El código de error es cero si no se ha producido ningún error.
  3. Utilice StartDoc() para iniciar el trabajo de impresión. La función StartDoc inicia un trabajo de impresión. Se inicializa y se pasa una estructura DOCINFO a la función StartDoc. Es conveniente inicializar la estructura DOCINFO rellenándola con ceros. Si desea más información, consulte el siguiente artículo de Microsoft Knowledge Base
    135119 PRB: StartDoc() produce DOCINFO no nulo
    La función InitDocStruct ilustrada adelante en este artículo realiza esta inicialización.
  4. Llame a StartPage(). La función StartPage prepara el controlador de impresora para aceptar datos. Por ejemplo
       StartPage( hDC );
    						
  5. Dibuje en el contexto de dispositivo. Dibuje gráficos o texto en el dispositivo de impresión. Por ejemplo, DrawStuff() muestra cómo dibujar texto en la impresora DC.
  6. Llame a EndPage(). Informa el dispositivo que EndPage funcione de que la aplicación ha terminado de escritura a una página. Esta función normalmente se utiliza para indicar al controlador de dispositivo que se lo avanza a una página nueva. Para imprimir varias páginas, pasos 4, 5 y 6 se deben utilizar para toda la página del documento como este ejemplo:
       for( i = START_PAGE; i <= END_PAGE; i++)
         {
           StartPage();
           DrawStuff();
           EndPage();
         }
    						
  7. Llame a EndDoc(). La función EndDoc finaliza un trabajo de impresión. Para información adicional sobre este tema, consulte la documentación Win32 SDK, sección Visiones generales.

Código de ejemplo

La función siguiente PrintStuff() ilustra el proceso de impresión:
   /*==============================================*/ 
   /* Sample code :  Typical printing process      */ 
   /* =============================================*/ 

   void PrintStuff( HWND hWndParent )
   {
       HDC        hDC;
       DOCINFO    di;

       // Need a printer DC to print to.
       hDC = GetPrinterDC();

       // Did you get a good DC?
       if( !hdc)
       {
           MessageBox(NULL, "Error creating DC", "Error",
                                       MB_APPLMODAL | MB_OK );
           return;
       }

       // You always have to use an AbortProc().
       if( SetAbortProc( hDC, AbortProc ) == SP_ERROR )
       {
           MessageBox( NULL, "Error setting up AbortProc",
                                       "Error", MB_APPLMODAL | MB_OK);
           return;
       }

       // Init the DOCINFO and start the document.
       InitDocStruct( &di, "MyDoc");
       StartDoc( hDC, &di );

       // Print one page.
       StartPage( hDC );
       DrawStuff( hDC );
       EndPage( hDC );

       // Indicate end of document.
       EndDoc( hDC );

       // Clean up
       DeleteDC( hDC );
   }

   /*===============================*/ 
   /* Obtain printer device context */ 
   /* ==============================*/ 
   HDC GetPrinterDC(void)
   {
       PRINTDLG pdlg;

       // Initialize the PRINTDLG structure.
       memset( &pdlg, 0, sizeof( PRINTDLG ) );
       pdlg.lStructSize = sizeof( PRINTDLG );
       // Set the flag to return printer DC.
       pdlg.Flags = PD_RETURNDEFAULT | PD_RETURNDC;

       // Invoke the printer dialog box.
       PrintDlg( &pdlg );
       // hDC member of the PRINTDLG structure contains
       // the printer DC.
       return pdlg.hDC;
   }

   /*===============================*/ 
   /* The Abort Procudure           */ 
   /* ==============================*/ 
   BOOL CALLBACK AbortProc( HDC hDC, int Error )
   {
       MSG   msg;
       while( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
       {
           TranslateMessage( &msg );
           DispatchMessage( &msg );
       }
       return TRUE;
   }

   /*===============================*/ 
   /* Initialize DOCINFO structure  */ 
   /* ==============================*/ 
   void InitDocStruct( DOCINFO* di, char* docname)
   {
       // Always zero it before using it.
       memset( di, 0, sizeof( DOCINFO ) );
       // Fill in the required members.
       di->cbSize = sizeof( DOCINFO );
       di->lpszDocName = docname;
   }

   /*===============================*/ 
   /* Drawing on the DC             */ 
   /* ==============================*/ 
   void DrawStuff( HDC hdc)
   {
       // This is the function that does draws on a given DC.
       // You are printing text here.
       TextOut(hdc, 0,0, "Test Printing", lstrlen( "Test Printing" ) );
   }
				

Propiedades

Id. de artículo: 139652 - Última revisión: sábado, 1 de diciembre de 2007 - Versión: 3.5
La información de este artículo se refiere a:
  • Microsoft Win32 Application Programming Interface sobre las siguientes plataformas
    • Microsoft Windows NT Server 3.5
    • Microsoft Windows NT Server 3.51
    • Microsoft Windows NT Workstation 3.5
    • Microsoft Windows NT Workstation 3.51
    • Microsoft Windows 95
    • Microsoft Windows CE Services 2.0
    • Microsoft Windows XP Professional x64 Edition
    • Microsoft Windows XP Home Edition
    • Microsoft Windows XP Professional
Palabras clave: 
kbcode kbgdi kbhowto kbprint KB139652 KbMtes kbmt
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente. Si ve errores y desea ayudar con este esfuerzo, rellene la encuesta en la parte inferior de este artículo.
Haga clic aquí para ver el artículo original (en inglés): 139652

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com