Cuadro de diálogo Imprimir

El cuadro de diálogo Imprimir permite al usuario seleccionar las opciones de un trabajo de impresión determinado. Por ejemplo, el usuario puede especificar la impresora que se va a usar, el intervalo de páginas que se va a imprimir y el número de copias.

Puede usar la función PrintDlgEx para mostrar una hoja de propiedades print, que tiene una página General que contiene controles similares al cuadro de diálogo Imprimir . La hoja de propiedades también puede tener páginas de propiedades adicionales específicas de la aplicación y específicas del controlador después de la página General .

Para crear y mostrar un cuadro de diálogo Imprimir , inicialice una estructura PRINTDLG y pase la estructura a la función PrintDlg .

En la ilustración siguiente se muestra un cuadro de diálogo imprimir típico.

cuadro de diálogo imprimir

Si el usuario hace clic en el botón Aceptar , PrintDlg devuelve TRUE y usa la estructura PRINTDLG para devolver información sobre las selecciones del usuario. Por ejemplo, los miembros hDevMode y hDevNames normalmente devuelven identificadores de memoria global para y estructuras DEVNAMES . Puede usar la información de estas estructuras para crear un contexto de dispositivo o un contexto de información para la impresora seleccionada.

Si el usuario cancela el cuadro de diálogo Imprimir o se produce un error, PrintDlg devuelve FALSE. Puede determinar la causa de un error mediante la función CommDlgExtendedError para recuperar el valor de error extendido.

El cuadro de diálogo Imprimir incluye un grupo Intervalo de impresión de botones de radio que indican si el usuario desea imprimir todas las páginas, un intervalo de páginas o solo el texto seleccionado. Antes de llamar a PrintDlg, puede establecer una de las marcas de PD_ALLPAGES, PD_SELECTION o PD_PAGENUMS para indicar qué botón está seleccionado inicialmente. Cuando PrintDlg devuelve TRUE, la función establece una de estas marcas para indicar las selecciones del usuario. Si se establece PD_PAGENUMS , los miembros nFromPage y nToPage de la estructura PRINTDLG contienen las páginas inicial y final especificadas por el usuario. Para deshabilitar el botón de radio Pages y sus controles De y Para editar asociados, establezca la marca PD_NOPAGENUMS . Para deshabilitar el botón de radio Selección , establezca la marca PD_NOSELECTION .

El cuadro de diálogo incluye un control de edición en el que el usuario puede escribir el número de copias que se van a imprimir. Si el miembro hDevMode de la estructura PRINTDLG no es NULL, el miembro dmCopies de la estructura especifica el valor inicial de este control de edición. Si hDevMode es NULL, el miembro nCopies de la estructura PRINTDLG especifica el valor inicial. Cuando PrintDlg devuelve, nCopies suele indicar el número de copias especificadas por el usuario. Sin embargo, si establece la marca PD_USEDEVMODECOPIESANDCOLLATE al crear el cuadro de diálogo, nCopies siempre se establece en 1 en la devolución y el miembro dmCopies de DEVMODE indica el número de copias que se van a imprimir.

La casilla Collate indica si el usuario quiere intercalar las páginas si se imprimen varias copias. La marca PD_COLLATE se establece si la casilla Intercalación está activada. Si la aplicación no admite varias copias o intercalación simulada, establezca la marca PD_USEDEVMODECOPIESANDCOLLATE en el miembro Flags de la estructura PRINTDLG . Esto deshabilita la casilla Collate y el control de edición Número de copias a menos que el controlador de impresora admita varias copias e intercalación.

La casilla Imprimir en archivo indica si el usuario quiere enviar la salida a un archivo en lugar de a una impresora. Puede establecer la marca PD_PRINTTOFILE para que la casilla esté seleccionada inicialmente. Para ocultar la casilla, establezca la marca PD_HIDEPRINTTOFILE . Para deshabilitarlo, establezca la marca PD_DISABLEPRINTTOFILE . Si el usuario selecciona la opción Imprimir en archivo , PrintDlg establece la marca PD_PRINTTOFILE y devuelve "FILE:" en el desplazamiento indicado por el miembro wOutputOffset de la estructura DEVNAMES . Al llamar a la función para iniciar la operación de impresión, especifique esta cadena "FILE:" en el miembro lpszOutput de la estructura. Especificar esta cadena hace que el subsistema de impresión consulte al usuario el nombre del archivo de salida.

De forma predeterminada, el cuadro de diálogo Imprimir muestra inicialmente información sobre la impresora predeterminada actual. Para mostrar información de otra impresora instalada, inicialice y una estructura DEVNAMES y asigne el identificador de memoria global a la estructura a los miembros hDevMode y hDevNames . El nombre de dispositivo que especifique en el miembro dmDeviceName de la estructura DEVMODE y en el miembro wDriverOffset de la estructura DEVNAMES debe identificar un dispositivo de impresora que también se muestra en la sección [Dispositivos] del archivo Win.ini. Si el dispositivo no aparece en la lista, PrintDlg devuelve un error.

Puede dirigir PrintDlg para crear un contexto de dispositivo o un contexto de información para la impresora estableciendo la marca PD_RETURNDC o PD_RETURNIC en el miembro Flags de la estructura PRINTDLG . La función devuelve un identificador al contexto del dispositivo o al contexto de información en el miembro hDC . Si usa la marca PD_RETURNDC , puede usar el contexto del dispositivo para generar la salida de la impresora.

Para recuperar información sobre la impresora predeterminada sin mostrar el cuadro de diálogo Imprimir , establezca la marca PD_RETURNDEFAULT . En este caso, PrintDlg devuelve inmediatamente después de establecer los miembros hDevMode y hDevNames para controlar las estructuras que contienen la información.

De forma predeterminada, PrintDlg muestra cuadros de mensaje cuando se producen errores. Por ejemplo, la función muestra un mensaje de error si no hay impresoras instaladas. Para evitar que la función muestre estos mensajes de advertencia, establezca la marca PD_NOWARNING .

En esta sección se tratan los temas siguientes.

Personalizar el cuadro de diálogo Imprimir

Puede proporcionar una plantilla personalizada para el cuadro de diálogo Imprimir , por ejemplo, si desea incluir controles adicionales que sean únicos para la aplicación. La función PrintDlg usa la plantilla personalizada en lugar de la plantilla predeterminada.

Para proporcionar una plantilla personalizada para el cuadro de diálogo Imprimir :

  1. Cree la plantilla personalizada modificando la plantilla predeterminada especificada en el archivo Prnsetup.dlg. Los identificadores de control usados en la plantilla de cuadro de diálogo Imprimir predeterminado se definen en el archivo Dlgs.h.
  2. Use la estructura PRINTDLG para habilitar la plantilla de la siguiente manera:
    • Si la plantilla personalizada es un recurso de una aplicación o biblioteca de vínculos dinámicos, establezca la marca PD_ENABLEPRINTTEMPLATE en el miembro Flags . Use los miembros hInstance y lpPrintTemplateName de la estructura para identificar el nombre del módulo y del recurso.

      -O bien-

    • Si la plantilla personalizada ya está en memoria, establezca la marca PD_ENABLEPRINTTEMPLATEHANDLE . Use el miembro hPrintTemplate para identificar el objeto de memoria que contiene la plantilla.

Puede proporcionar un procedimiento de enlace PrintHookProc para el cuadro de diálogo Imprimir . El procedimiento de enlace puede procesar los mensajes enviados al cuadro de diálogo. También puede enviar mensajes al cuadro de diálogo. Si usa una plantilla personalizada para definir controles adicionales, debe proporcionar un procedimiento de enlace para procesar la entrada de los controles.

Para habilitar un procedimiento de enlace para el cuadro de diálogo Imprimir :

  1. Establezca la marca PD_ENABLEPRINTHOOK en el miembro Flags de la estructura PRINTDLG .
  2. Especifique la dirección del procedimiento de enlace en el miembro lpfnPrintHook .

Después de procesar su WM_INITDIALOG mensaje, el procedimiento del cuadro de diálogo envía un mensaje WM_INITDIALOG al procedimiento de enlace. El parámetro lParam de este mensaje es un puntero a la estructura PRINTDLG utilizada para inicializar el cuadro de diálogo.

Puede crear y mostrar un cuadro de diálogo Configurar impresión estableciendo la marca PD_PRINTSETUP en una llamada a la función PrintDlg . Sin embargo, el cuadro de diálogo Configurar impresión se ha reemplazado por el cuadro de diálogo Configurar página y no debe usarse en nuevas aplicaciones.

Las marcas siguientes solo se aplican al cuadro de diálogo Configurar impresión :

  • PD_ENABLESETUPHOOK
  • PD_ENABLESETUPTEMPLATE
  • PD_ENABLESETUPTEMPLATEHANDLE