Estructura DEVMODEW
La estructura DEVMODEW es la versión Unicode de la estructura DEVMODE, que se describe en la documentación de Microsoft Windows SDK. (El sufijo "W" en DEVMODEW significa "ancho" o caracteres Unicode). Aunque las aplicaciones pueden usar cualquiera de las estructuras, se requieren controladores para usar la estructura DEVMODEW en lugar de la estructura DEVMODE.
Miembros públicos y privados
Inmediatamente después de los miembros definidos de una estructura DEVMODEW (a menudo denominados miembros PÚBLICOS DEVMODEW), puede haber un conjunto de miembros definidos por el controlador (sus miembros DEVMODEW privados). En la ilustración siguiente se muestra la sección pública (la propia estructura DEVMODEW) y la sección privada.
Normalmente, los miembros privados solo los usan los controladores de impresora. El controlador proporciona el tamaño, en bytes, de este área privada en el miembro dmDriverExtra . Los miembros privados definidos por el controlador son para uso exclusivo del controlador.
En el caso de los controladores de impresora, la estructura DEVMODEW se usa para especificar opciones de usuario para un documento de impresión. También se usa para especificar valores predeterminados de estas opciones para impresoras, como el número de copias que se van a imprimir, el tamaño del papel y otros atributos. En el caso de los dispositivos de visualización, la estructura DEVMODEW especifica atributos de visualización, como el número de bits por píxel, dimensiones de píxeles y frecuencia de visualización.
Inicialización de una estructura DEVMODEW
Dependiendo de si es utilizado por un controlador de pantalla o por un controlador de impresora, una estructura DEVMODEW se inicializa de dos maneras diferentes.
Inicialización del controlador de visualización DEVMODEW
El punto de entrada DrvGetModes de un controlador de pantalla inicializa todos los miembros de la estructura DEVMODEW en cero. Después, DrvGetModes copia el nombre del archivo DLL del controlador para mostrar en el miembro dmDeviceName , rellena los miembros dmSpecVersion y dmDriverVersion con la versión de la estructura DEVMODEW y copia la información de atributo para mostrar en los miembros adecuados.
Inicialización del controlador de impresora DEVMODEW
Cuando una aplicación realiza una llamada a DocumentProperties (una función DLL de interfaz de impresora que se describe en la documentación de Microsoft Windows SDK) o DrvDocumentPropertySheets (un DDI de gráficos de sistema operativo basado en NT), se crea una estructura DEVMODEW con valores predeterminados. Después, una aplicación puede modificar cualquiera de los miembros públicos de DEVMODEW. Después de cualquier cambio, la aplicación debe realizar una segunda llamada a la misma función a la que llamó antes, con el fin de combinar los miembros modificados con los de la estructura DEVMODEW interna del controlador. La segunda llamada es necesaria, ya que es posible que algunos cambios no funcionen correctamente; se debe llamar al controlador de impresora para corregir la estructura DEVMODEW. Cuando el documento está a punto de imprimirse, la aplicación pasa la estructura DEVMODEW combinada a CreateDC (descrita en la documentación de Microsoft Windows SDK), que la pasa a drvEnablePDEV DDI. En ese momento, el archivo DLL de representación del controlador valida la estructura DEVMODEW y realiza reparaciones, si es necesario, antes de llevar a cabo el trabajo de impresión.
Uso de una estructura DEVMODEW
Varias API y DDIs de gráficos usan la información de la estructura DEVMODEW con fines como la impresión, la consulta de funcionalidades del dispositivo, la visualización de la interfaz de usuario y otras. Por ejemplo, DrvConvertDevMode es un DDI de gráficos de cola de impresión que traduce la estructura DEVMODEW de una versión del sistema operativo a otra. Esto puede ser necesario si un controlador de impresora obtiene una estructura DEVMODEW de otra máquina que se ejecuta en otra versión del sistema operativo.
Modificar una estructura DEVMODEW
Las aplicaciones y los controladores son gratuitos para solicitar una estructura DEVMODEW y modificar su parte pública directamente. Sin embargo, solo los controladores pueden modificar los miembros privados de la estructura DEVMODEW.
Para modificar los miembros privados de la estructura DEVMODEW, un controlador debe determinar primero el desplazamiento del principio de los datos privados. Dado un puntero al principio de esta estructura y el miembro dmSize , que contiene el tamaño de la parte pública de la estructura, se puede encontrar el principio de la parte privada. En el ejemplo siguiente se muestra cómo inicializar un puntero al principio de la sección privada. En este ejemplo, pdm apunta al principio de la estructura DEVMODEW.
PVOID pvDriverData = (PVOID) (((BYTE *) pdm) + (pdm -> dmSize));
Diferencias entre el controlador de impresora y el controlador de pantalla DEVMODEW
Los miembros de la estructura DEVMODEW se dividen en tres categorías:
Miembros usados solo por controladores de impresora
Miembros usados solo por controladores de pantalla
Miembros usados por los controladores de impresora y visualización
En la tabla siguiente se enumeran varios miembros públicos de DEVMODEW que solo usan los controladores de impresora:
Usado solo por controladores de impresora | Propósito |
---|---|
dmScale | Especifica el porcentaje por el que se va a escalar la imagen para imprimir. |
dmCopies | Especifica el número de copias que se van a imprimir. |
dmColor | Especifica si una impresora de color debe imprimir color o monocromo. |
dmOrientation | Especifica la orientación del papel, ya sea vertical u horizontal. |
En la tabla siguiente se enumeran varios miembros públicos de DEVMODEW que solo usan los controladores de pantalla:
Usado solo por controladores de pantalla | Propósito |
---|---|
dmBitsPerPel | Especifica la resolución de color, en bits por píxel, del dispositivo de visualización. |
dmPelsWidth | Especifica el ancho, en píxeles, de la superficie del dispositivo visible. |
dmPelsHeight | Especifica el alto, en píxeles, de la superficie del dispositivo visible. |
dmDisplayFlags | Especifica el modo de presentación: color frente a monocromo, entrelazado frente a no entrelazado. |
dmDisplayFrequency | Especifica, en hercios, la frecuencia de actualización de la pantalla. |
En la tercera tabla se enumeran varios miembros públicos de DEVMODEW que usan los controladores de impresora y visualización:
Usado por los controladores de impresora y visualización | Propósito |
---|---|
dmDeviceName | En el caso de las pantallas, especifica el archivo DLL del controlador de pantalla. Para las impresoras, especifica el "nombre descriptivo" de la impresora. |
dmFields | Especifica las marcas de bits que identifican cuáles de los miembros DEVMODEW que siguen están en uso. Por ejemplo, la marca DM_BITSPERPEL se establece cuando el miembro dmBitsPerPel contiene datos válidos . |
dmSize | Especifica el tamaño, en bytes, de la parte pública de la estructura DEVMODEW. |
dmDriverExtra | Especifica el número de bytes de datos del controlador privado que siguen a los miembros de la estructura pública. En el caso de los controladores de pantalla, suele ser cero. |
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de