Gestione delle superfici gestite dal dispositivo
Importante
La piattaforma di stampa moderna è il mezzo preferito di Windows per comunicare con le stampanti. Ti consigliamo di usare il driver di classe IPP di Microsoft, insieme a Print Support Apps (PSA), per personalizzare l'esperienza di stampa in Windows 10 e 11 per lo sviluppo di dispositivi per stampanti.
Per altre informazioni, vedere Piattaforma di stampa moderna e guida alla progettazione dell'app di supporto per la stampa.
Quando Unidrv esegue il rendering delle immagini di pagina di stampa, usa superfici di disegno gestite da GDI. Il rendering di tutte le immagini viene eseguito come bitmap. Per i dispositivi con funzionalità che non possono essere sfruttate da questo scenario, ad esempio la possibilità di disegnare vettori, è possibile fornire supporto personalizzato dei driver per una superficie di disegno gestita dal dispositivo. Per supportare una superficie gestita dal dispositivo, è necessario fornire un plug-in di rendering che implementa quanto segue:
Set di funzioni di hook per tutte le funzioni di disegno DDI grafica supportate da Unidrv. È necessario associare le funzioni seguenti:
DrvAlphaBlend DrvBitBltDrvCopyBitsDrvDitherColorDrvFillPathDrvGradientFillDrvLineToDrvPlgBltDrvBrushDrvStretchBlt DrvStretchBltDrvStrokeAndFillPath DrvStrokeAndFillPathDrvTextOutDrvTransparentBlt
Metodo IPrintOemUni::EnableDriver , usato per fornire a Unidrv puntatori alle funzioni di hook DDI grafiche.
Il metodo IPrintOemUni::D riverDMS , che informa Unidrv che deve essere usata una superficie gestita dal dispositivo e specifica quale delle funzioni di hook definite verrà usata per la superficie.
Le funzioni di hook non possono richiamare i servizi di supporto con prefisso GDI quando si disegna su una superficie gestita dal dispositivo. Tuttavia, possono creare una superficie bitmap temporanea e quindi passare l'handle della superficie alle funzioni di disegno con prefisso Eng (vedere Rendering di un processo di stampa).
Il metodo IPrintOemUni::D riverDMS viene chiamato ogni volta che viene eseguito il rendering di un processo di stampa, quindi il plug-in di rendering può specificare il tipo di superficie di rendering (gestita da GDI o gestita dal dispositivo) per ogni processo. Basando la scelta della superficie su un'opzione selezionabile nell'interfaccia utente, è necessario fornire anche un plug-in dell'interfaccia utente.
Disegno di testo in una superficie gestita dal dispositivo
Il plug-in per il rendering deve associare la funzione DrvTextOut di Unidrv (insieme a tutte le altre funzioni di disegno DDI grafiche). La creazione di testo per una superficie gestita dal dispositivo comporta l'interazione tra le quattro funzioni seguenti:
Funzione DrvTextOut di Unidrv
Funzione di hooking DrvTextOut del plug-in di rendering
Metodo IPrintOemDriverUni::D rvUniTextOut di Unidrv
Metodo IPrintOemUni::TextOutAsBitmap del plug-in di rendering
I passaggi necessari per la visualizzazione del testo in una superficie gestita dal dispositivo sono i seguenti:
GDI chiama la funzione DrvTextOut di Unidrv.
Unidrv chiama la funzione di hooking DrvTextOut del plug-in di rendering.
La funzione di hook invia comandi al dispositivo per specificare il pennello, la rotazione e l'area di ritaglio del testo.
La funzione di hook chiama il metodo IPrintOemDriverUni::D rvUniTextOut di Unidrv, che usa i tipi di carattere scaricati per restituire il testo. Questo metodo gestisce anche il ritaglio basato su glifi.
Se IPrintOemDriverUni::D rvUniTextOut non può usare un tipo di carattere scaricabile (perché il tipo di carattere non è disponibile o è ruotato), chiama il metodo IPrintOemUni::TextOutAsBitmap del plug-in di rendering, che disegna il testo come bitmap.
Dopo la restituzione di IPrintOemDriverUni::D rvUniTextOut, la funzione di hook DrvTextOut deve disegnare sottolineature e barrature, in base ai rettangoli specificati dal parametro prclExtra della funzione DrvTextOut, usando i comandi vector (se supportato).