Estructura DEVMODEW (wingdi.h)

La estructura DEVMODEW se usa para especificar características de los dispositivos de visualización e impresión en el juego de caracteres Unicode (ancho).

Sintaxis

typedef struct _devicemodeW {
  WCHAR dmDeviceName[CCHDEVICENAME];
  WORD  dmSpecVersion;
  WORD  dmDriverVersion;
  WORD  dmSize;
  WORD  dmDriverExtra;
  DWORD dmFields;
  union {
    struct {
      short dmOrientation;
      short dmPaperSize;
      short dmPaperLength;
      short dmPaperWidth;
      short dmScale;
      short dmCopies;
      short dmDefaultSource;
      short dmPrintQuality;
    } DUMMYSTRUCTNAME;
    POINTL dmPosition;
    struct {
      POINTL dmPosition;
      DWORD  dmDisplayOrientation;
      DWORD  dmDisplayFixedOutput;
    } DUMMYSTRUCTNAME2;
  } DUMMYUNIONNAME;
  short dmColor;
  short dmDuplex;
  short dmYResolution;
  short dmTTOption;
  short dmCollate;
  WCHAR dmFormName[CCHFORMNAME];
  WORD  dmLogPixels;
  DWORD dmBitsPerPel;
  DWORD dmPelsWidth;
  DWORD dmPelsHeight;
  union {
    DWORD dmDisplayFlags;
    DWORD dmNup;
  } DUMMYUNIONNAME2;
  DWORD dmDisplayFrequency;
  DWORD dmICMMethod;
  DWORD dmICMIntent;
  DWORD dmMediaType;
  DWORD dmDitherType;
  DWORD dmReserved1;
  DWORD dmReserved2;
  DWORD dmPanningWidth;
  DWORD dmPanningHeight;
} DEVMODEW, *PDEVMODEW, *NPDEVMODEW, *LPDEVMODEW;

Miembros

dmDeviceName[CCHDEVICENAME]

Para una presentación, especifica el nombre del archivo DLL del controlador para mostrar; por ejemplo, "perm3dd" para el controlador de pantalla 3Dlabs Permedia3.

Para una impresora, especifica el "nombre descriptivo"; por ejemplo, "PCL/HP LaserJet" en el caso de PCL/HP LaserJet. Si el nombre es mayor que los caracteres CCHDEVICENAME de longitud, el colador la trunca para que se ajuste a la matriz.

dmSpecVersion

Especifica el número de versión de esta estructura DEVMODEW. El número de versión actual se identifica mediante la constante DM_SPECVERSION en wingdi.h.

dmDriverVersion

Para una impresora, especifica el número de versión del controlador de impresora asignado por el desarrollador del controlador de impresora.

Los controladores de pantalla pueden establecer este miembro en DM_SPECVERSION.

dmSize

Especifica el tamaño en bytes de la estructura PÚBLICA DEVMODEW, no incluidos los miembros privados y especificados por el controlador identificados por el miembro dmDriverExtra .

dmDriverExtra

Especifica el número de bytes de datos del controlador privado que siguen a los miembros de la estructura pública. Si un controlador de dispositivo no proporciona miembros PRIVADOS DEVMODEW, este miembro debe establecerse en cero.

dmFields

Especifica marcas de bits que identifican cuáles de los siguientes miembros de DEVMODEW están en uso. Por ejemplo, la marca DM_ORIENTATION se establece cuando el miembro dmOrientation contiene datos válidos. Las marcas de DM_XXX se definen en wingdi.h.

DUMMYUNIONNAME

DUMMYUNIONNAME.DUMMYSTRUCTNAME

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmOrientation

Para las impresoras, especifica la orientación del papel. Este miembro puede ser DMORIENT_PORTRAIT o DMORIENT_LANDSCAPE.

Este miembro no se usa para las pantallas.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmPaperSize

Para las impresoras, especifica el tamaño del papel en el que se va a imprimir. Este miembro debe ser cero si los miembros dmPaperLength y dmPaperWidth especifican la longitud y el ancho del papel. De lo contrario, el miembro dmPaperSize debe ser una de las constantes con prefijo DMPAPER definidas en wingdi.h.

Este miembro no se usa para las pantallas.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmPaperLength

Para las impresoras, especifica la longitud del papel, en unidades de 1/10 de un milímetro. Este valor invalida la longitud del papel especificado por el miembro dmPaperSize y se usa si el papel es de un tamaño personalizado, o si el dispositivo es una impresora de matriz de puntos, que puede imprimir una página de longitud arbitraria.

Este miembro no se usa para las pantallas.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmPaperWidth

Para las impresoras, especifica el ancho del papel, en unidades de 1/10 de un milímetro. Este valor invalida el ancho del papel especificado por el miembro dmPaperSize . Este miembro debe usarse si se usa dmPaperLength .

Este miembro no se usa para las pantallas.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmScale

En el caso de las impresoras, especifica el porcentaje por el que se va a escalar la imagen para la impresión. El tamaño de página de la imagen se escala a la página física mediante un factor de dmScale/100. Por ejemplo, una imagen de 17 pulgadas por 22 pulgadas con un valor de escala de 100 requiere papel de 17 x 22 pulgadas, mientras que la misma imagen con un valor de escala de 50 debe imprimirse con un tamaño medio y caber en papel de tamaño carta.

Este miembro no se usa para las pantallas.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmCopies

En el caso de las impresoras, especifica el número de copias que se van a imprimir, si el dispositivo admite varias copias.

Este miembro no se usa para las pantallas.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmDefaultSource

En el caso de las impresoras, especifica el contenedor de entrada predeterminado de la impresora. Debe ser una de las constantes con prefijo DMBIN definidas en wingdi.h. Si la constante especificada es DMBIN_FORMSOURCE, la bandeja de entrada debe seleccionarse automáticamente.

Este miembro no se usa para las pantallas.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.dmPrintQuality

Para las impresoras, especifica la resolución de la impresora. Los siguientes valores constantes negativos se definen en wingdi.h:

DMRES_HIGH
DMRES_MEDIUM
DMRES_LOW
DMRES_DRAFT

Si se especifica un valor positivo, representa el número de puntos por pulgada (PPP) para la resolución x y la resolución y se especifica mediante dmYResolution.

Este miembro no se usa para las pantallas.

DUMMYUNIONNAME.dmPosition

DUMMYUNIONNAME.DUMMYSTRUCTNAME2

DUMMYUNIONNAME.DUMMYSTRUCTNAME2.dmPosition

Para las pantallas, especifica una estructura POINTL que contiene las coordenadas x e y de la esquina superior izquierda de la pantalla, en coordenadas de escritorio. Este miembro se usa para determinar la posición relativa de los monitores en un entorno de varios monitores.

Este miembro no se usa para impresoras.

DUMMYUNIONNAME.DUMMYSTRUCTNAME2.dmDisplayOrientation

Este miembro solo se define para Windows XP y versiones posteriores.

Para las pantallas, especifica la orientación en la que se deben presentar las imágenes. Cuando el bit de DM_DISPLAYORIENTATION no se establece en el miembro dmFields , este miembro debe establecerse en cero. Cuando el bit de DM_DISPLAYORIENTATION se establece en el miembro dmFields , este miembro debe establecerse en uno de los valores siguientes:

Valor Significado
DMDO_DEFAULT La orientación del dispositivo de pantalla del modo actual es la orientación natural del dispositivo y debe usarse como valor predeterminado.
DMDO_90 La orientación del dispositivo de pantalla es de 90 grados (medida en el sentido de las agujas del reloj) de la de DMDO_DEFAULT.
DMDO_180 La orientación del dispositivo de pantalla es de 180 grados (medida en el sentido de las agujas del reloj) de la de DMDO_DEFAULT.
DMDO_270 La orientación del dispositivo de pantalla es de 270 grados (medida en el sentido de las agujas del reloj) de la de DMDO_DEFAULT.
 

Este miembro no se usa para impresoras.

Para obtener más información, vea Devolver modos de presentación: DrvGetModes.

DUMMYUNIONNAME.DUMMYSTRUCTNAME2.dmDisplayFixedOutput

Este miembro solo se define para Windows XP y versiones posteriores.

En el caso de las pantallas de resolución fija, especifica cómo el dispositivo puede presentar un modo de resolución inferior en una pantalla de mayor resolución. Por ejemplo, si la resolución de un dispositivo de pantalla se fija en 1024 X 768, y su modo se establece en 640 x 480, el dispositivo puede mostrar una imagen de 640 X 480 dentro del espacio de pantalla 1024 X 768 o ajustar la imagen de 640 X 480 para rellenar el espacio de pantalla más grande.

Cuando el bit de DM_DISPLAYFIXEDOUTPUT no está establecido en el miembro dmFields , este miembro debe establecerse en cero. Cuando el bit de DM_DISPLAYFIXEDOUTPUT se establece en el miembro dmFields , este miembro debe establecerse en uno de los siguientes valores:

Valor Significado
DMDFO_CENTER El dispositivo de pantalla presenta una imagen de modo de resolución inferior al centrarla en el espacio de pantalla más grande.
DMDFO_STRETCH El dispositivo de pantalla presenta una imagen en modo de resolución inferior al ampliarla para rellenar el espacio de pantalla más grande.
 

Este miembro no se usa para impresoras.

Para obtener más información, vea Devolver modos de presentación: DrvGetModes.

dmColor

Para las impresoras, especifica si una impresora de color debe imprimir color o monocromo. Este miembro puede ser uno de DMCOLOR_COLOR o DMCOLOR_MONOCHROME.

Este miembro no se usa para las pantallas.

dmDuplex

Para las impresoras, especifica la impresión dúplex (doble cara) para impresoras compatibles con dúplex. Este miembro puede ser uno de los siguientes valores:

DMDUP_HORIZONTAL

Imprima el doble lado, mediante el enlace de borde corto.

DMDUP_SIMPLEX

Imprima un solo lado.

DMDUP_VERTICAL

Imprima el doble lado mediante el enlace de borde largo.

Este miembro no se usa para las pantallas.

dmYResolution

Para las impresoras, especifica la resolución y de la impresora, en PPP. Si se usa este miembro, el miembro dmPrintQuality especifica la resolución x .

Este miembro no se usa para las pantallas.

dmTTOption

Para las impresoras, especifica cómo se deben imprimir las fuentes TrueType. Este miembro debe ser una de las constantes con prefijo DMTT definidas en wingdi.h.

Este miembro no se usa para las pantallas.

dmCollate

En el caso de las impresoras, especifica si se deben intercalar varias copias. Este miembro puede ser uno de los siguientes valores:

DMCOLLATE_TRUE

Intercala al imprimir varias copias.

DMCOLLATE_FALSE

No intercale al imprimir varias copias.

Este miembro no se usa para las pantallas.

dmFormName[CCHFORMNAME]

Para las impresoras, especifica el nombre del formulario que se va a usar; como "Carta" o "Legal". Debe ser un nombre que se pueda obtener llamando a la función EnumForms de Win32.

Este miembro no se usa para las pantallas.

dmLogPixels

Para las pantallas, especifica el número de píxeles lógicos por pulgada de un dispositivo de pantalla y debe ser igual al miembro ulLogPixels de la estructura GDIINFO .

Este miembro no se usa para impresoras.

dmBitsPerPel

En el caso de las pantallas, especifica la resolución de color, en bits por píxel, de un dispositivo de pantalla.

Este miembro no se usa para impresoras.

dmPelsWidth

Para las pantallas, especifica el ancho, en píxeles, de la superficie visible del dispositivo.

Este miembro no se usa para impresoras.

dmPelsHeight

Para las pantallas, especifica el alto, en píxeles, de la superficie visible del dispositivo.

Este miembro no se usa para impresoras.

DUMMYUNIONNAME2

DUMMYUNIONNAME2.dmDisplayFlags

Especifica el modo de visualización del dispositivo. Este miembro puede ser una combinación de los valores siguientes.

Valor Significado
DM_GRAYSCALE Especifica que la pantalla es un dispositivo que no es de color. Si no se establece esta marca, se asume el color. Esta marca ya no es válida.
DM_INTERLACED Especifica que el modo de presentación está entrelazado. Si no se establece la marca, se supone que no se ha interlacado.

Los controladores de pantalla usan este miembro; por ejemplo, en la función ChangeDisplaySettings . Los controladores de impresora no usan este miembro.

DUMMYUNIONNAME2.dmNup

En el caso de las impresoras, especifica si el sistema de impresión controla la impresión "N-up" (reproduciendo varias páginas lógicas EMF en una sola página física). El valor de este miembro puede ser uno de los siguientes:

Valor Significado
DMNUP_SYSTEM El sistema de impresión controla la impresión "N-up".
DMNUP_ONEUP El sistema de impresión no controla la impresión "N-up". Una aplicación puede establecer dmNup en DMNUP_ONEUP si pretende realizar la impresión "N" por sí misma.
 

Este miembro no se usa para las pantallas.

dmDisplayFrequency

Para las pantallas, especifica la frecuencia, en hercios, de un dispositivo de visualización en su modo actual.

Este miembro no se usa para impresoras.

dmICMMethod

Especifica una de las constantes con prefijo DMICMMETHOD definidas en wingdi.h.

dmICMIntent

Especifica una de las constantes con prefijo DMICM definidas en wingdi.h.

dmMediaType

Especifica una de las constantes con prefijo DMMEDIA definidas en wingdi.h.

dmDitherType

Especifica una de las constantes con prefijo DMDITHER definidas en wingdi.h.

dmReserved1

Está reservado para uso del sistema y debe omitirlo el controlador.

dmReserved2

Está reservado para uso del sistema y debe omitirlo el controlador.

dmPanningWidth

Está reservado para uso del sistema y debe omitirlo el controlador.

dmPanningHeight

Está reservado para uso del sistema y debe omitirlo el controlador.

Comentarios

La estructura DEVMODEW es la versión Unicode de la estructura DEVMODE (descrita en la documentación de Microsoft Windows SDK). Aunque las aplicaciones pueden usar la versión ANSI o Unicode de la estructura, los controladores deben usar la versión Unicode.

Para los controladores de impresora, la estructura DEVMODEW se usa para especificar las características de la impresora requeridas por un documento de impresión. También se usa para especificar las características predeterminadas de una impresora.

Inmediatamente después de los miembros definidos de una estructura DEVMODEW (a menudo denominados miembros públicos), puede haber un conjunto de miembros definidos por el controlador (a menudo denominados miembros PRIVADOS DEVMODEW). El controlador proporciona el tamaño, en bytes, de este área privada en dmDriverExtra. Los miembros privados definidos por el controlador son para uso exclusivo del controlador. Se puede hacer referencia a la dirección inicial de los miembros privados mediante el miembro dmSize de la siguiente manera:

PVOID pvDriverData = (PVOID) (((BYTE *) pdm) + (pdm->dmSize));

Un controlador puede confiar en el administrador de colas para pasar un búfer DEVMODEW que no sea menor que (dmSize + dmDriverExtra). Como resultado, el controlador puede leer de forma segura ese número de bytes a partir del principio del búfer sin provocar una infracción de acceso y sin necesidad de sondear la memoria.

Antes de reproducir EMF, GDI llama al administrador de colas para validar el contenido de la parte pública del búfer DEVMODEW. Si el búfer DEVMODEW no supera las pruebas de validación realizadas en el colador, GDI no pasa el búfer al controlador de impresora.

Advertencia Windows solo confirma que la parte pública de DEVMODEW es válida. Sin embargo, los datos dañados en la parte privada de la estructura pueden hacer que el código del controlador se bloquee en la aplicación o en el proceso de cola. Por lo tanto, antes de cada uso de los datos DEVMODEW, el controlador debe comprobar que la parte privada de DEVMODEW tiene un formato correcto.
 
En Windows 2000, se agregó un nuevo miembro de unión a la estructura DEVMODEW. Este miembro de unión contiene un miembro de estructura DEVMODEW existente, dmDisplayFlags, junto con un nuevo miembro, dmNup. Este miembro se describe en la sección Miembros anteriores.

En Windows XP, se agregó un nuevo miembro de estructura . Este miembro de estructura contiene un miembro de estructura DEVMODEW existente, dmPosition, junto con dos nuevos miembros, dmDisplayOrientation y dmDisplayFixedOutput. Estos miembros se describen en la sección Miembros anterior.

Además para Windows XP, varios miembros de la estructura DEVMODEW se trasladaron a diferentes ubicaciones de esta estructura. Los miembros dmScale, dmCopies, dmDefaultSource y dmPrintQuality se anexaron al miembro struct que contiene los miembros dmOrientation, dmPaperSize, dmPaperLength y dmPaperWidth .

Nota

El encabezado wingdi.h define DEVMODE 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 neutro de codificación con código que no es neutral de codificación puede provocar discrepancias que dan lugar a errores de compilación o en tiempo de ejecución. Para obtener más información, vea Convenciones para prototipos de función.

Requisitos

Requisito Valor
Header wingdi.h (incluya Wingdi.h)

Consulte también

DOCUMENTPROPERTYHEADER

DrvConvertDevMode

DrvDeviceCapabilities

DrvGetModes