Estructura PRINTDLGA (commdlg.h)

Contiene información que la función PrintDlg usa para inicializar el cuadro de diálogo Imprimir. Una vez que el usuario cierra el cuadro de diálogo, el sistema usa esta estructura para devolver información sobre las selecciones del usuario.

Sintaxis

typedef struct tagPDA {
  DWORD           lStructSize;
  HWND            hwndOwner;
  HGLOBAL         hDevMode;
  HGLOBAL         hDevNames;
  HDC             hDC;
  DWORD           Flags;
  WORD            nFromPage;
  WORD            nToPage;
  WORD            nMinPage;
  WORD            nMaxPage;
  WORD            nCopies;
  HINSTANCE       hInstance;
  LPARAM          lCustData;
  LPPRINTHOOKPROC lpfnPrintHook;
  LPSETUPHOOKPROC lpfnSetupHook;
  LPCSTR          lpPrintTemplateName;
  LPCSTR          lpSetupTemplateName;
  HGLOBAL         hPrintTemplate;
  HGLOBAL         hSetupTemplate;
} PRINTDLGA, *LPPRINTDLGA;

Miembros

lStructSize

Tipo: DWORD

Tamaño de la estructura, en bytes.

hwndOwner

Tipo: HWND

Identificador de la ventana que posee el cuadro de diálogo. Este miembro puede ser cualquier identificador de ventana válido o puede ser NULL si el cuadro de diálogo no tiene propietario.

hDevMode

Tipo: HGLOBAL

Identificador de un objeto de memoria global móvil que contiene una estructura DEVMODE . Si hDevMode no es NULL en la entrada, debe asignar un bloque de memoria móvil para la estructura DEVMODE e inicializar sus miembros. La función PrintDlg usa los datos de entrada para inicializar los controles en el cuadro de diálogo. Cuando PrintDlg devuelve, los miembros DEVMODE indican la entrada del usuario.

Si hDevMode es NULL en la entrada, PrintDlg asigna memoria para la estructura DEVMODE , inicializa sus miembros para indicar la entrada del usuario y devuelve un identificador que lo identifica.

Si el controlador de dispositivo de la impresora especificada no admite modos de dispositivo extendidos, hDevMode es NULL cuando PrintDlg devuelve.

Si el nombre del dispositivo (especificado por el miembro dmDeviceName de la estructura DEVMODE ) no aparece en la sección [devices] de WIN.INI, PrintDlg devuelve un error.

Para obtener más información sobre los miembros hDevMode y hDevNames , vea la sección Comentarios al final de este tema.

hDevNames

Tipo: HGLOBAL

Identificador de un objeto de memoria global móvil que contiene una estructura DEVNAMES . Si hDevNames no es NULL en la entrada, debe asignar un bloque de memoria extraíble para la estructura DEVNAMES e inicializar sus miembros. La función PrintDlg usa los datos de entrada para inicializar los controles en el cuadro de diálogo. Cuando se devuelve PrintDlg , los miembros DEVNAMES contienen información para la impresora elegida por el usuario. Puede usar esta información para crear un contexto de dispositivo o un contexto de información.

El miembro hDevNames puede ser NULL, en cuyo caso PrintDlg asigna memoria para la estructura DEVNAMES , inicializa sus miembros para indicar la entrada del usuario y devuelve un identificador que lo identifica.

Para obtener más información sobre los miembros hDevMode y hDevNames , vea la sección Comentarios al final de este tema.

hDC

Tipo: HDC

Identificador de un contexto de dispositivo o un contexto de información, en función de si el miembro Flags especifica la marca PD_RETURNDC o PC_RETURNIC . Si no se especifica ninguna marca, el valor de este miembro no está definido. Si se especifican ambas marcas, PD_RETURNDC tiene prioridad.

Flags

Tipo: DWORD

Inicializa el cuadro de diálogo Imprimir . Cuando se devuelve el cuadro de diálogo, establece estas marcas para indicar la entrada del usuario. Este miembro puede ser uno o varios de los valores siguientes.

Valor Significado
PD_ALLPAGES
0x00000000
Marca predeterminada que indica que el botón de radio Todo está seleccionado inicialmente. Esta marca se usa como marcador de posición para indicar que no se especifican las marcas PD_PAGENUMS y PD_SELECTION .
PD_COLLATE
0x00000010
Si se establece esta marca, se activa la casilla Collate .

Si se establece esta marca cuando se devuelve la función PrintDlg , la aplicación debe simular la intercalación de varias copias. Para obtener más información, vea la descripción de la marca PD_USEDEVMODECOPIESANDCOLLATE .

Consulte PD_NOPAGENUMS.

PD_DISABLEPRINTTOFILE
0x00080000
Deshabilita la casilla Imprimir en archivo .
PD_ENABLEPRINTHOOK
0x00001000
Habilita el procedimiento de enlace especificado en el miembro lpfnPrintHook . Esto habilita el procedimiento de enlace para el cuadro de diálogo Imprimir .
PD_ENABLEPRINTTEMPLATE
0x00004000
Indica que los miembros hInstance y lpPrintTemplateName especifican un reemplazo para la plantilla predeterminada del cuadro de diálogo Imprimir .
PD_ENABLEPRINTTEMPLATEHANDLE
0x00010000
Indica que el miembro hPrintTemplate identifica un bloque de datos que contiene una plantilla de cuadro de diálogo precargada. Esta plantilla reemplaza la plantilla predeterminada para el cuadro de diálogo Imprimir . El sistema omite el miembro lpPrintTemplateName si se especifica esta marca.
PD_ENABLESETUPHOOK
0x00002000
Habilita el procedimiento de enlace especificado en el miembro lpfnSetupHook . Esto habilita el procedimiento de enlace para el cuadro de diálogo Configurar impresión .
PD_ENABLESETUPTEMPLATE
0x00008000
Indica que los miembros hInstance y lpSetupTemplateName especifican un reemplazo para la plantilla predeterminada del cuadro de diálogo Configurar impresión .
PD_ENABLESETUPTEMPLATEHANDLE
0x00020000
Indica que el miembro hSetupTemplate identifica un bloque de datos que contiene una plantilla de cuadro de diálogo precargada. Esta plantilla reemplaza la plantilla predeterminada para el cuadro de diálogo Configurar impresión . El sistema omite el miembro lpSetupTemplateName si se especifica esta marca.
PD_HIDEPRINTTOFILE
0x00100000
Oculta la casilla Imprimir en archivo .
PD_NONETWORKBUTTON
0x00200000
Oculta y deshabilita el botón Red .
PD_NOPAGENUMS
0x00000008
Deshabilita el botón de radio Pages y los controles de edición asociados. Además, hace que la casilla Intercalar aparezca en el cuadro de diálogo.
PD_NOSELECTION
0x00000004
Deshabilita el botón de radio Selección .
PD_NOWARNING
0x00000080
Impide que se muestre el mensaje de advertencia cuando no hay ninguna impresora predeterminada.
PD_PAGENUMS
0x00000002
Si se establece esta marca, se selecciona el botón de radio Pages . Si esta marca se establece cuando la función PrintDlg devuelve, los miembros nFromPage y nToPage indican las páginas iniciales y finales especificadas por el usuario.
PD_PRINTSETUP
0x00000040
Hace que el sistema muestre el cuadro de diálogo Configurar impresión en lugar del cuadro de diálogo Imprimir .
PD_PRINTTOFILE
0x00000020
Si se establece esta marca, se activa la casilla Imprimir en archivo . Si se establece esta marca cuando devuelve la función PrintDlg , el desplazamiento indicado por el miembro wOutputOffset de la estructura DEVNAMES contiene la cadena "FILE:". Al llamar a la función StartDoc para iniciar la operación de impresión, especifique esta cadena "FILE:" en el miembro lpszOutput de la estructura DOCINFO . Especificar esta cadena hace que el subsistema de impresión consulte al usuario el nombre del archivo de salida.
PD_RETURNDC
0x00000100
Hace que PrintDlg devuelva un contexto de dispositivo que coincida con las selecciones realizadas por el usuario en el cuadro de diálogo. El contexto del dispositivo se devuelve en hDC.
PD_RETURNDEFAULT
0x00000400
Si se establece esta marca, la función PrintDlg no muestra el cuadro de diálogo. En su lugar, establece los miembros hDevNames y hDevMode para controlar las estructuras DEVMODE y DEVNAMES que se inicializan para la impresora predeterminada del sistema. Tanto hDevNames como hDevMode deben ser NULL, o PrintDlg devuelve un error.
PD_RETURNIC
0x00000200
De forma similar a la marca PD_RETURNDC , salvo que esta marca devuelve un contexto de información en lugar de un contexto de dispositivo. Si no se especifica ni PD_RETURNDCni PD_RETURNIC , hDC no está definido en la salida.
PD_SELECTION
0x00000001
Si se establece esta marca, se selecciona el botón de radio Selección . Si no se establece PD_PAGENUMS ni PD_SELECTION , se selecciona el botón de radio Todo .
PD_SHOWHELP
0x00000800
Hace que el cuadro de diálogo muestre el botón Ayuda . El miembro hwndOwner debe especificar la ventana para recibir los mensajes registrados HELPMSGSTRING que envía el cuadro de diálogo cuando el usuario hace clic en el botón Ayuda .
PD_USEDEVMODECOPIES
0x00040000
Igual que PD_USEDEVMODECOPIESANDCOLLATE.
PD_USEDEVMODECOPIESANDCOLLATE
0x00040000
Esta marca indica si la aplicación admite varias copias e intercalación. Establezca esta marca en la entrada para indicar que la aplicación no admite varias copias e intercalación. En este caso, el miembro nCopies de la estructura PRINTDLG siempre devuelve 1 y PD_COLLATE nunca se establece en el miembro Flags .

Si no se establece esta marca, la aplicación es responsable de imprimir e intercalar varias copias. En este caso, el miembro nCopies de la estructura PRINTDLG indica el número de copias que el usuario desea imprimir y la marca PD_COLLATE del miembro Flags indica si el usuario quiere intercalación.

Independientemente de si se establece esta marca, una aplicación puede determinar desde nCopies y PD_COLLATE cuántas copias se van a representar y si se imprimen intercaladas.

Si se establece esta marca y el controlador de impresora no admite varias copias, el control De edición copias está deshabilitado. De forma similar, si se establece esta marca y el controlador de impresora no admite la intercalación, la casilla Intercalación está deshabilitada.

Los miembros dmCopies y dmCollate de la estructura DEVMODE contienen las copias y la información de intercalación utilizada por el controlador de impresora. Si se establece esta marca y el controlador de impresora admite varias copias, el miembro dmCopies indica el número de copias solicitadas por el usuario. Si se establece esta marca y el controlador de impresora admite la intercalación, el miembro dmCollate de la estructura DEVMODE indica si el usuario quiere intercalación. Si no se establece esta marca, el miembro dmCopies siempre devuelve 1 y el miembro dmCollate siempre es cero.

Problema conocido en Windows 2000/XP/2003: Si no se establece esta marca antes de llamar a PrintDlg, PrintDlg podría intercambiar valores nCopies y dmCopies cuando se devuelve. La solución alternativa para este problema es usar dmCopies si su valor es mayor que 1; en caso contrario, use nCopies para obtener el número real de copias que se imprimirán cuando PrintDlg devuelva.

 

Para asegurarse de que PrintDlg o PrintDlgEx devuelven los valores correctos en los miembros dmCopies y dmCollate de la estructura DEVMODE , establezca PD_RETURNDC = TRUE y PD_USEDEVMODECOPIESANDCOLLATE = TRUE. Al hacerlo, el miembro nCopies de la estructura PRINTDLG siempre es 1 y PD_COLLATE siempre es FALSE.

Para asegurarse de que PrintDlg o PrintDlgEx devuelve los valores correctos en nCopies y PD_COLLATE, establezca PD_RETURNDC = TRUE y PD_USEDEVMODECOPIESANDCOLLATE = FALSE. Al hacerlo, dmCopies siempre es 1 y dmCollate siempre es FALSE.

En Windows Vista y Windows 7, cuando se llama a PrintDlg o PrintDlgEx con PD_RETURNDC establecido en TRUE y PD_USEDEVMODECOPIESANDCOLLATE establecido en FALSE, la función PrintDlg o PrintDlgEx establece el número de copias en el miembro nCopies de la estructura PRINTDLG y establece el número de copias en la estructura representada por el miembro hDC de la estructura PRINTDLG .

Al realizar llamadas a GDI, debe omitir el valor de nCopies, tener en cuenta el valor como 1 y usar el hDC devuelto para evitar imprimir copias duplicadas.

nFromPage

Tipo: WORD

Valor inicial del control de edición de página inicial.

Cuando PrintDlg devuelve, nFromPage es la página inicial especificada por el usuario. Si se selecciona el botón de radio Pages cuando el usuario hace clic en el botón Aceptar , PrintDlg establece la marca PD_PAGENUMS y no vuelve hasta que el usuario escribe un valor de página inicial que se encuentra dentro del intervalo de página mínimo a máximo.

Si el valor de entrada de nFromPage o nToPage está fuera del intervalo mínimo o máximo, PrintDlg devuelve un error solo si se especifica la marca PD_PAGENUMS ; de lo contrario, muestra el cuadro de diálogo, pero cambia el valor fuera del intervalo al valor mínimo o máximo.

nToPage

Tipo: WORD

Valor inicial del control de edición de página final. Cuando PrintDlg devuelve, nToPage es la página final especificada por el usuario. Si se selecciona el botón de radio Pages cuando el uso hace clic en el botón Ok , PrintDlg establece la marca PD_PAGENUMS y no vuelve hasta que el usuario escribe un valor de página final que está dentro del intervalo de página mínimo al máximo.

nMinPage

Tipo: WORD

Valor mínimo para el intervalo de páginas especificado en los controles de edición de página Desde y Para . Si nMinPage es igual a nMaxPage, se deshabilitan el botón de radio Pages y los controles de edición de página inicial y final.

nMaxPage

Tipo: WORD

Valor máximo del intervalo de páginas especificado en los controles de edición de página Desde y To .

nCopies

Tipo: WORD

Número inicial de copias para el control de edición Copias si hDevMode es NULL; de lo contrario, el miembro dmCopies de la estructura DEVMODE contiene el valor inicial. Cuando PrintDlg devuelve, nCopies contiene el número real de copias que se van a imprimir. Este valor depende de si la aplicación o el controlador de impresora son responsables de imprimir varias copias. Si la marca PD_USEDEVMODECOPIESANDCOLLATE se establece en el miembro Flags , nCopies siempre es 1 en devolución y el controlador de impresora es responsable de imprimir varias copias. Si no se establece la marca, la aplicación es responsable de imprimir el número de copias especificadas por nCopies. Para obtener más información, vea la descripción de la marca PD_USEDEVMODECOPIESANDCOLLATE .

hInstance

Tipo: HINSTANCE

Si la marca PD_ENABLEPRINTTEMPLATE o PD_ENABLESETUPTEMPLATE está establecida en el miembro Flags , hInstance es un identificador de la instancia de aplicación o módulo que contiene la plantilla de cuadro de diálogo denominada por el miembro lpPrintTemplateName o lpSetupTemplateName .

lCustData

Tipo: LPARAM

Datos definidos por la aplicación que el sistema pasa al procedimiento de enlace identificado por el miembro lpfnPrintHook o lpfnSetupHook . Cuando el sistema envía el mensaje WM_INITDIALOG al procedimiento de enlace, el parámetro lParam del mensaje es un puntero a la estructura PRINTDLG especificada cuando se creó el cuadro de diálogo. El procedimiento de enlace puede usar este puntero para obtener el valor lCustData .

lpfnPrintHook

Tipo: LPPRINTHOOKPROC

Puntero a un procedimiento de enlace PrintHookProc que puede procesar mensajes destinados al cuadro de diálogo Imprimir . Este miembro se omite a menos que la marca PD_ENABLEPRINTHOOK esté establecida en el miembro Flags .

lpfnSetupHook

Tipo: LPSETUPHOOKPROC

Puntero a un procedimiento de enlace SetupHookProc que puede procesar mensajes destinados al cuadro de diálogo Configurar impresión . Este miembro se omite a menos que la marca PD_ENABLESETUPHOOK esté establecida en el miembro Flags .

lpPrintTemplateName

Tipo: LPCTSTR

Nombre del recurso de plantilla del cuadro de diálogo en el módulo identificado por el miembro hInstance . Esta plantilla reemplaza la plantilla predeterminada del cuadro de diálogo Imprimir . Este miembro se omite a menos que la marca PD_ENABLEPRINTTEMPLATE esté establecida en el miembro Flags .

lpSetupTemplateName

Tipo: LPCTSTR

Nombre del recurso de plantilla del cuadro de diálogo en el módulo identificado por el miembro hInstance . Esta plantilla reemplaza la plantilla del cuadro de diálogo Configurar impresión predeterminada. Este miembro se omite a menos que la marca PD_ENABLESETUPTEMPLATE esté establecida en el miembro Flags .

hPrintTemplate

Tipo: HGLOBAL

Si la marca PD_ENABLEPRINTTEMPLATEHANDLE se establece en el miembro Flags , hPrintTemplate es un identificador de un objeto de memoria que contiene una plantilla de cuadro de diálogo. Esta plantilla reemplaza la plantilla predeterminada del cuadro de diálogo Imprimir .

hSetupTemplate

Tipo: HGLOBAL

Si la marca PD_ENABLESETUPTEMPLATEHANDLE se establece en el miembro Flags , hSetupTemplate es un identificador de un objeto de memoria que contiene una plantilla de cuadro de diálogo. Esta plantilla reemplaza la plantilla del cuadro de diálogo Configurar impresión predeterminada.

Comentarios

Si hDevMode y hDevNames son NULL, PrintDlg inicializa el cuadro de diálogo con la impresora predeterminada actual. Para inicializar el cuadro de diálogo para una impresora diferente, utilice el miembro wDeviceOffset de la estructura DEVNAMES para especificar el nombre de la impresora.

Tenga en cuenta que el miembro dmDeviceName de la estructura DEVMODE también especifica un nombre de impresora. Sin embargo, dmDeviceName está limitado a 32 caracteres y el nombre wDeviceOffset no lo es. Si los nombres wDeviceOffset y dmDeviceName no son los mismos, PrintDlg inicializa el cuadro de diálogo con la impresora especificada por wDeviceOffset.

Si se establece la marca PD_RETURNDEFAULT y hDevMode y hDevNames son NULL, PrintDlg usa los miembros hDevNames y hDevMode para devolver información sobre la impresora predeterminada actual sin mostrar el cuadro de diálogo.

Nota

El encabezado commdlg.h define PRINTDLG como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o tiempo de ejecución. Para obtener más información, vea Convenciones para prototipos de función.

Requisitos

   
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Encabezado commdlg.h (incluye Windows.h)

Consulte también

Biblioteca de cuadros de diálogo comunes

Conceptual

DEVMODE

DEVNAMES

PrintDlg

Referencia

WM_INITDIALOG