Compartir por


Arquitectura de la vista previa de impresión

En este artículo se explica cómo el marco MFC implementa la funcionalidad de vista previa de impresión. Temas cubiertos:

La vista previa de impresión es algo diferente de la pantalla y la impresión porque, en lugar de dibujar directamente una imagen en un dispositivo, la aplicación debe simular la impresora mediante la pantalla. Para dar cabida a esto, la Biblioteca de clases de Microsoft Foundation define una clase especial (no documentada) derivada de la clase CDC, denominada CPreviewDC. Todos los objetos CDC contienen dos contextos de dispositivo, pero normalmente son idénticos. En un objeto CPreviewDC, son diferentes: la primera representa la impresora que se está simulando y la segunda representa la pantalla en la que se muestra realmente la salida.

Proceso de vista previa de impresión

Cuando el usuario selecciona el comando Vista previa de impresión en el menú Archivo, el marco crea un objeto CPreviewDC. Cada vez que la aplicación realiza una operación que establece una característica del contexto del dispositivo de impresora, el marco también realiza una operación similar en el contexto del dispositivo de pantalla. Por ejemplo, si la aplicación selecciona una fuente para imprimir, el marco selecciona una fuente para la pantalla que simula la fuente de la impresora. Siempre que su aplicación envíe la salida a la impresora, el marco de trabajo envía la salida a la pantalla.

La vista previa de impresión también difiere de la impresión en el orden en que cada uno dibuja las páginas de un documento. Durante la impresión, el marco continúa un bucle de impresión hasta que se ha representado un intervalo determinado de páginas. Durante la vista previa de impresión, se muestran una o dos páginas en cualquier momento y, a continuación, la aplicación espera; no se muestran más páginas hasta que el usuario responde. Durante la vista previa de impresión, la aplicación también debe responder a WM_PAINT mensajes, al igual que durante la pantalla normal.

Se llama a la función CView::OnPreparePrinting cuando se invoca el modo de vista previa, al igual que al principio de un trabajo de impresión. La estructura de la estructura CPrintInfo pasada a la función contiene varios miembros cuyos valores se pueden establecer para ajustar determinadas características de la operación de vista previa de impresión. Por ejemplo, puedes establecer el miembro m_nNumPreviewPages para especificar si desea obtener una vista previa del documento en modo de una o dos páginas.

Modificación de la vista previa de impresión

Puedes modificar el comportamiento y la apariencia de la vista previa de impresión de varias maneras más fácilmente. Por ejemplo, puedes, entre otras cosas:

  • Haz que la ventana de vista previa de impresión muestre una barra de desplazamiento para facilitar el acceso a cualquier página del documento.

  • Haz que la vista previa de impresión mantenga la posición del usuario en el documento iniciando su presentación en la página actual.

  • Haz que se realice una inicialización diferente para la vista previa e impresión de impresión.

  • Haz que la vista previa de impresión muestre números de página en sus propios formatos.

Si sabes cuánto tiempo es y llamas SetMaxPage al documento con el valor adecuado, el marco puede usar esta información en modo de vista previa, así como durante la impresión. Una vez que el marco conoce la longitud del documento, puede proporcionar la ventana de vista previa con una barra de desplazamiento, lo que permite al usuario paginar hacia atrás y hacia atrás a través del documento en modo de vista previa. Si no has establecido la longitud del documento, el marco no puede colocar el cuadro de desplazamiento para indicar la posición actual, por lo que el marco no agrega una barra de desplazamiento. En este caso, el usuario debe usar los botones Página siguiente y Página anterior de la barra de control de la ventana de vista previa para desplazarse por el documento.

Para la vista previa de impresión, es posible que te resulte útil asignar un valor al miembro m_nCurPage de CPrintInfo, aunque nunca lo haría para la impresión normal. Durante la impresión normal, este miembro lleva información del marco a la clase de vista. Así, el marco indica a la vista qué página se debe imprimir.

Por el contrario, cuando se inicia el modo de vista previa de impresión, el miembro m_nCurPage lleva información en la dirección opuesta: desde la vista al marco. El marco de trabajo usa el valor de este miembro para determinar qué página se debe previsualizar primero. El valor predeterminado de este miembro es 1, por lo que la primera página del documento se muestra inicialmente. Puedes invalidar OnPreparePrinting para establecer este miembro en el número de la página que se está viendo en el momento en que se invocó el comando Vista previa de impresión. De este modo, la aplicación mantiene la posición actual del usuario al pasar del modo de presentación normal al modo de vista previa de impresión.

A veces, puede que desees OnPreparePrinting realizar una inicialización diferente en función de si se llama para un trabajo de impresión o para la vista previa de impresión. Para determinarlo, examina la variable miembro m_bPreview en la estructura CPrintInfo. Este miembro se establece en TRUE cuando se invoca la vista previa de impresión.

La CPrintInfo estructura también contiene un miembro denominado m_strPageDesc, que se usa para dar formato a las cadenas mostradas en la parte inferior de la pantalla en modos de página única y de varias páginas. De forma predeterminada, estas cadenas tienen el formato «Page n» y «Pages n - m"», pero puede modificar m_strPageDesc desde dentro OnPreparePrinting y establecer las cadenas en algo más elaborado. Consulta CPrintInfo Structure (Estructura de CPrintInfo) en la referencia de MFC para obtener más información.

Consulte también

Impresión y vista previa de impresión
Impresión
CView (clase)
CDC (clase)