Manipulação de superfícies gerenciadas por dispositivo
Importante
A plataforma de impressão moderna é o meio preferencial do Windows para se comunicar com as impressoras. Recomendamos que você use o driver de classe de caixa de entrada IPP da Microsoft juntamente com PSA (Aplicativos de Suporte à Impressão) para personalizar a experiência de impressão no Windows 10 e 11 para o desenvolvimento de dispositivos de impressora.
Para obter mais informações, consulte Plataformade impressão moderna e o Guia de design do aplicativo de suporte de impressão.
Quando o Unidrv renderiza imagens de páginas de impressão, ele utiliza superfícies de desenho gerenciadas por GDI. Todas as imagens são renderizadas como bitmaps. Para dispositivos com capacidades que não podem ser exploradas por este cenário, como a capacidade de desenhar vetores, é possível fornecer suporte personalizado de driver para uma superfície de desenho gerenciada pelo dispositivo. Para dar suporte a uma superfície gerenciada por dispositivo, é necessário fornecer um plug-in de renderização que implemente o seguinte:
Um conjunto de funções de gancho para todas as funções de desenho DDI gráficas compatíveis com Unidrv. É necessário conectar as seguintes funções:
DrvAlphaBlendDrvBitBltDrvCopyBitsDrvDitherColorDrvFillPathDrvGradientFillDrvLineToDrvPlgBltDrvRealizeBrushDrvStretchBltDrvStretchBltROPDrvStrokeAndFillPathDrvStrokePathDrvTextOutDrvTransparentBlt
O método IPrintOemUni::EnableDriver, que é usado para fornecer ao Unidrv ponteiros para as funções DDI gráficas de gancho.
O método IPrintOemUni::DriverDMS, que informa ao Unidrv que uma superfície gerenciada por dispositivo deve ser usada e especifica qual das funções de gancho definidas será usada para a superfície.
As funções de gancho não podem chamar os serviços de suporte com prefixo Eng da GDI ao desenhar em uma superfície gerenciada pelo dispositivo. No entanto, podem criar uma superfície de bitmap temporária e transferir o identificador dessa superfície para funções de desenho com prefixo Eng (consulte Renderizando um trabalho de impressão).
O método IPrintOemUni::DriverDMS é chamado toda vez que um trabalho de impressão está prestes a ser renderizado, para que o plug-in de renderização possa especificar o tipo de superfície de renderização (gerenciada por GDI ou gerenciada por dispositivo) para cada trabalho. Basear a escolha da superfície em uma opção selecionável na interface do usuário exige que você também forneça um plug-in de interface do usuário.
Desenhando texto em uma superfície gerenciada pelo dispositivo
O plug-in de renderização deve interceptar a função DrvTextOut do Unidrv (junto com todas as outras funções de desenho DDI gráficas). A criação de texto para uma superfície gerenciada por dispositivo envolve a interação entre as quatro funções a seguir:
Função DrvTextOut do Unidrv
Função de gancho DrvTextOut do plug-in de renderização
Método IPrintOemDriverUni::DrvUniTextOut do Unidrv
Renderizando o método IPrintOemUni::TextOutAsBitmap do plug-in
As etapas envolvidas na exibição de texto em uma superfície gerenciada pelo dispositivo são as seguintes:
A GDI chama a função DrvTextOut do Unidrv.
O Unidrv chama a função de conexão DrvTextOut do plug-in de gancho.
A função de gancho envia comandos ao dispositivo para especificar o pincel, a rotação e a região do clipe do texto.
A função de gancho chama o método IPrintOemDriverUni::DrvUniTextOut do Unidrv, que usa fontes baixadas para gerar o texto. Esse método também lida com o recorte baseado em glifos.
Se IPrintOemDriverUni::DrvUniTextOut não puder usar uma fonte para download (porque a fonte não está disponível ou está rotacionada), ele chamará o método IPrintOemUni::TextOutAsBitmap do plug-in de renderização, que desenha o texto como um bitmap.
Depois que IPrintOemDriverUni::DrvUniTextOut retornar, a função de gancho DrvTextOut deverá desenhar sublinhados e tachados, com base nos retângulos especificados pelo parâmetro prclExtra da função DrvTextOut, com o uso de comandos de vetor (se houver suporte).