Uso di funzioni GDI nei processori di stampa
Un set di funzioni GDI in modalità utente viene esportato da Gdi32.dll, per l'uso da parte dei processori di stampa che gestiscono EMF del sistema operativo basato su NT come formato di input. Nella tabella seguente sono elencate le funzioni fornite.
Nome della funzione | Descrizione |
---|---|
GdiDeleteSpoolFileHandle | Rilascia un handle di file di spooling. |
GdiEndDocEMF | Completa le operazioni di riproduzione EMF per un documento del processo di stampa. |
GdiEndPageEMF | Completa le operazioni di riproduzione EMF per una pagina fisica ed espelle la pagina dalla stampante. |
GdiGetDC | Restituisce un handle al contesto di dispositivo della stampante. |
GdiGetDevmodeForPage | Restituisce la struttura DEVMODEW di una pagina del documento. |
GdiGetPageCount | Restituisce il numero di pagine del documento. |
GdiGetPageHandle | Restituisce un handle a una pagina del documento. |
GdiGetSpoolFileHandle | Restituisce un handle di file di spooling, obbligatorio come input per le altre funzioni GDI. |
GdiPlayPageEMF | Riproduce i record EMF associati a una pagina del documento. |
GdiResetDCEMF | Reimposta il contesto di dispositivo di una stampante. |
GdiStartDocEMF | Esegue operazioni di inizializzazione per il documento del processo di stampa. |
GdiStartPageEMF | Esegue operazioni di inizializzazione per una pagina fisica. |
PrintDocumentOnPrintProcessor di un processore di stampa EMF deve chiamare GdiGetSpoolFileHandle per ottenere un handle di file di spooling e GdiGetDC per ottenere l'handle del contesto di dispositivo della stampante. Può quindi eseguire i passaggi seguenti:
Per ogni documento del processo di stampa, GdiStartDocEMF deve essere chiamato prima che tutti i record EMF vengano riprodotti e GdiEndDocEMF deve essere chiamato dopo che è stato riprodotto l'ultimo record EMF.
Affinché ogni pagina fisica venga stampata, è necessario chiamare GdiStartPageEMF prima che tutte le pagine del documento vengano disegnate nella pagina e GdiEndPageEMF deve essere chiamato dopo che l'ultima pagina del documento è stata disegnata nella pagina fisica.
Affinché ogni pagina del documento venga disegnata in una pagina fisica, È necessario chiamare GdiGetDevmodeForPage per determinare se il contenuto della struttura DEVMODE è stato modificato dopo il disegno dell'ultima pagina del documento. Se DEVMODE è stato modificato, è necessario avviare una nuova pagina fisica (chiamando GdiEndPageEMF e GdiStartPageEMF) e il contesto di dispositivo della stampante deve essere aggiornato chiamando GdiResetDCEMF. Una pagina del documento viene disegnata in una pagina fisica chiamando prima GdiGetPageHandle per ottenere un handle di pagina del documento e quindi chiamando GdiPlayPageEMF per disegnare la pagina.
Dopo che il processo è stato disegnato completamente, il processore di stampa deve chiamare GdiDeleteSpoolFileHandle.
Se un processore di stampa richiede il numero totale di pagine prima che possa iniziare a stampare pagine (ad esempio per la stampa di pagine in ordine inverso) può chiamare GdiGetPageCount, ma questa funzione non restituisce fino al termine dello spooling e quindi disabilita la possibilità di stampare durante lo spooling.
Se un processore di stampa utilizza queste funzioni GDI, la relativa funzione EnumPrintProcessorDatatypes deve restituire "NT EMF" come tipo di dati supportato, che rappresenta il formato EMF generico di Windows 2000 e versioni successive. Il processore di stampa non deve modificare i record EMF.