Control de superficies administradas por dispositivos
Importante
La plataforma de impresión moderna es el medio preferido de Windows para comunicarse con impresoras. Se recomienda usar el controlador de clase de bandeja de entrada IPP de Microsoft, junto con aplicaciones de soporte técnico de impresión (PSA), para personalizar la experiencia de impresión en Windows 10 y 11 para el desarrollo de dispositivos de impresora.
Para obtener más información, consulte Plataforma de impresión moderna y la Guía de diseño de aplicaciones para compatibilidad con impresión.
Cuando Unidrv representa imágenes de página de impresión, usa superficies de dibujo administradas por GDI. Todas las imágenes se representan como mapas de bits. En el caso de los dispositivos con funcionalidades que no se pueden aprovechar en este escenario, como la capacidad de dibujar vectores, puede proporcionar compatibilidad con controladores personalizados para una superficie de dibujo administrada por el dispositivo. Para admitir una superficie administrada por dispositivos, debe proporcionar un complemento de representación que implemente lo siguiente:
Un conjunto de funciones de enlace para todas las funciones de dibujo de DDI de gráficos compatibles con Unidrv. Las siguientes funciones deben enlazarse:
DrvAlphaBlendDrvBitBltDrvCopyBitsDrvDitherColorDrvFillPathDrvGradientFillDrvLineToDrvPlgBltDrvRealizeBrushDrvStretchBltDrvStretchBltROPDrvStrokeAndFillPathDrvStrokePathDrvTextOutDrvTransparentBlt
El método IPrintOemUni::EnableDriver, que se usa para proporcionar Unidrv con punteros a las funciones de enlace de DDI de gráficos.
El método IPrintOemUni::DriverDMS, que informa a Unidrv de que se va a usar una superficie administrada por el dispositivo y especifica cuál de las funciones de enlace definidas se usará para la superficie.
Las funciones de enlace no pueden volver a llamar a los servicios de compatibilidad con prefijo Eng de GDI al dibujar en una superficie administrada por el dispositivo. Sin embargo, pueden crear una superficie de mapa de bits temporal y, a continuación, pasar el identificador de esa superficie a las funciones de dibujo con prefijo Eng (consulte Representación de un trabajo de impresión).
Se llama al método IPrintOemUni::DriverDMS cada vez que se representa un trabajo de impresión, por lo que el complemento de representación puede especificar el tipo de superficie de representación (administrada por GDI o administrada por dispositivos) para cada trabajo. Basar la opción de superficie en una opción seleccionable en la interfaz de usuario requiere que también proporcione un complemento de interfaz de usuario.
Dibujo de texto en una superficie administrada por el dispositivo
El complemento de representación debe enlazar la función DrvTextOut de Unidrv (junto con todas las demás funciones de dibujo de DDI de gráficos). La creación de texto para una superficie administrada por el dispositivo implica la interacción entre las cuatro funciones siguientes:
Función DrvTextOut de Unidrv
Función de enlace DrvTextOut del complemento de representación
Método IPrintOemDriverUni::DrvUniTextOut de Unidrv
Método IPrintOemUni::TextOutAsBitmap del complemento de representación
Los pasos necesarios para mostrar texto en una superficie administrada por el dispositivo son los siguientes:
GDI llama a la función DrvTextOut de Unidrv.
Unidrv llama a la función de enlace DrvTextOut del complemento de representación.
La función de enlace envía comandos al dispositivo para especificar el pincel, la rotación y la región de recorte del texto.
La función de enlace llama al método IPrintOemDriverUni::DrvUniTextOut de Unidrv, que usa fuentes descargadas para generar el texto. Este método también controla el recorte basado en glifos.
Si IPrintOemDriverUni::DrvUniTextOut no puede usar una fuente descargable (porque la fuente no está disponible o gira), llama al método IPrintOemUni::TextOutAsBitmap del complemento de representación, que dibuja el texto como un mapa de bits.
Después de que IPrintOemDriverUni::DrvUniTextOut devuelva el resultado, la función de enlace DrvTextOut debe dibujar subrayados y tachado, en función de los rectángulos especificados por el parámetro prclExtra de la función DrvTextOut, mediante comandos vectoriales (si se admite).