Delen via


Een afdruktaak weergeven

Belangrijk

Het moderne afdrukplatform is de voorkeursmiddel van Windows om te communiceren met printers. Wij raden aan de IPP-inboxklasse-driver van Microsoft te gebruiken, samen met Print Support Apps (PSA), om de afdrukervaring in Windows 10 en 11 aan te passen bij de ontwikkeling van printerapparaten.

Zie de Print support app design guidevoor meer informatie.

Afdruktaken worden weergegeven terwijl ze worden gemaakt, of ze worden als EMF-records naar een spoolbestand geschreven. In het geval van EMF-records vindt rendering plaats wanneer de EMF afdrukprocessor (localspl.dll) de records afspeelt. Rendering bestaat uit een reeks oproepen van de GDI-tekenfuncties in de gebruikersmodus, te beginnen met CreateDC. De aanroep van CreateDC is de eerste in een serie aanroepen van applicaties die leiden tot een keten van acties met betrekking tot de grafische rendering-engine (GRE, ook wel bekend als kernelmodus GDI) en het DLL-bestand met printerafbeeldingen.

In de volgende afbeelding ziet u de interactie tussen GDI in de kernelmodus en het DLL-bestand met printerafbeeldingen nadat CreateDC- wordt aangeroepen.

diagram waarin de interactie tussen de kernel-mode GDI en de printergraphics-DLL wordt geïllustreerd nadat createdc is aangeroepen.

  1. Wanneer een toepassing de functie CreateDC- aanroept om een context van een printerapparaat te maken, controleert GDI of het juiste DLL-bestand met printerafbeeldingen is geladen. Als dat niet het is, laadt GDI het DLL-bestand en roept de DrvEnableDriver functie aan in het DLL-bestand. De functie wordt niet opnieuw aangeroepen, tenzij het stuurprogramma opnieuw wordt geladen.

  2. Vervolgens roept GDI de DrvEnablePDEV functie van de printer graphics DLL aan, zodat het stuurprogramma een fysiek apparaatexemplaren kan maken en apparaatkenmerken kan retourneren. GDI gebruikt de geretourneerde informatie om een interne beschrijving van het apparaatexemplaar te maken.

  3. GDI roept vervolgens de DrvCompletePDEV- functie van de graphics DLL aan om een GDI-handle aan de apparaatinstantie te leveren. De grafische DLL moet deze handle gebruiken als invoer voor een aantal van de callbacks met het voorvoegsel Eng, die worden geleverd door de GDI-tekenengine (zie GDI Support Services).

  4. Nadat GDI het exemplaaradres van het apparaat heeft ontvangen, wordt een oproep gedaan naar de grafische DLL's DrvEnableSurface functie, die het oppervlak voor tekenen instelt en het koppelt aan het fysieke exemplaar van het apparaat.

  5. Het stuurprogramma kan een tekenoppervlak voor het apparaatexemplaar maken door EngCreateBitmap te gebruiken. Als het tekenoppervlak ook door het apparaat wordt beheerd, kan het stuurprogramma EngCreateDeviceSurfaceaanroepen.

  6. Als EngCreateBitmap geen bitmap kan opgeven die een volledige fysieke pagina bevat en als het stuurprogramma paginabandering ondersteunt, kan EngMarkBandingSurface worden aangeroepen om GDI te informeren dat banding wordt gebruikt.

  7. Ten slotte moet de EngAssociateSurface- worden aangeroepen om GDI toe te staan het gemaakte oppervlak te koppelen aan een opgegeven apparaatexemplaar en om GDI te laten weten welke door het stuurprogramma geleverde grafische DDI-tekenfuncties (indien van toepassing) moeten worden aangeroepen bij het tekenen op dit specifieke oppervlak.

Op dit moment is er een tekenoppervlak gemaakt en kan de rendering beginnen. De functies die GDI aanroept, zijn afhankelijk van of banding wordt toegepast.

Banding in gebruik

GDI roept de volgende functies aan in het DLL-bestand voor printerafbeeldingen om elk document weer te geven wanneer er wordt gestreept:

DrvStartDoc

Voor elke fysieke pagina

DrvStartPage

DrvStartBanding

Voor elke bandigpassage op een fysieke pagina

DrvQueryPerBandInfo

Renderingbewerkingen

DrvNextBand // Rastergegevens voor deze band verzenden en vervolgens het oppervlak wissen om opnieuw te gebruiken met de volgende band

DrvEndDoc

Banding niet in gebruik

Voor elk document dat moet worden weergegeven wanneer er geen banding wordt gebruikt, roept GDI de volgende functies aan in het DLL-bestand met printerafbeeldingen:

DrvStartDoc

Voor elke fysieke pagina

DrvStartPage

Renderingbewerkingen

DrvSendPage // Rastergegevens verzenden voor de pagina

DrvEndDoc

Met uitzondering van DrvQueryPerBandInfo, zijn deze functies bedoeld om het dll-bestand met printerafbeeldingen toe te staan om besturingsreeksen naar de printerhardware te verzenden (door EngWritePrinter aan te roepen), en om interne bewerkingen uit te voeren die nodig zijn voor het initialiseren of voltooien van de verwerking van een document, pagina of band.

Het DLL-bestand met printerafbeeldingen is verantwoordelijk voor het verzenden van de gerenderde afbeelding (de inhoud van het tekenoppervlak) naar de printer op de juiste momenten (door EngWritePrinteraan te roepen), als volgt:

  • Voor GDI-beheerde of apparaatbeheerde bitmapoppervlakken

    Het tekenoppervlak is een door GDI of het stuurprogramma geleverde bitmap. Het DLL-bestand met printerafbeeldingen kan sommige tekenfuncties koppelen (zie Surface-onderhandeling). Als pagina-banding wordt gebruikt, moet de functie DrvNextBand- tekenoppervlakinhoud verzenden. Als banding niet wordt gebruikt, moet de DrvSendPage-functie de inhoud van het tekenoppervlak verzenden.

  • Voor door het apparaat beheerde vectoroppervlakken

    Het tekenoppervlak bevindt zich binnen het apparaat. Het DLL-bestand met printerafbeeldingen koppelt alle tekenfuncties (zie Surface Negotiation) en deze functies verzenden afbeeldingsgegevens naar de printer tijdens renderingbewerkingen. Paginabanding wordt niet gebruikt.

Als u verwacht dat een grafische DDI-functie, geleverd door een printer-grafische DLL, mogelijk meer dan vijf seconden kan duren, moet u code opnemen die EngCheckAbort ten minste om de vijf seconden aanroept om te controleren of de afdruktaak moet worden beëindigd.

Nadat GDI DrvEndDoc aanroept om aan te geven dat een document volledig is weergegeven, wordt het DrvDisableSurfaceaangeroepen. Als DrvEnableSurfaceEngCreateBitmapwordt aangeroepen, moet DrvDisableSurfaceEngDeleteSurfaceaanroepen.

GDI roept de DrvDisablePDEV--functie van een printer graphics DLL aan wanneer een toepassing DeleteDC-aanroept.

Als een toepassing tijdens het afdrukken van een document de ResetDC- functie aanstuurt, creëert GDI een nieuwe apparaatcontext en roept de printergrafische DLL's DrvEnablePDEV- functie aan voor de nieuwe context. Vervolgens roept GDI de functie DrvResetPDEV aan, zodat de grafische DLL de nieuwe context kan bijwerken met informatie uit de oude. Vervolgens worden DrvDisableSurface en DrvDisablePDEV aangeroepen voor de oude context, gevolgd door DrvEnableSurface voor de nieuwe context. Tot slot roept GDI DrvStartDoc aan en wordt de weergave hervat op een nieuwe pagina.

GDI roept DrvDisableDriver aan voordat u het DLL-bestand met printerafbeeldingen loslaadt.

Als printerhardware tekenbewerkingen ondersteunt die niet worden ondersteund door GDI-tekenfuncties, kan het DLL-bestand met printerafbeeldingen een DrvDrawEscape- functie bieden.

Een DLL voor printerafbeeldingen kan een DrvEscape- functie bieden als het nodig is om teken- of niet-tekenbewerkingen te ondersteunen die niet beschikbaar zijn via GDI-functies. Het Microsoft PostScript-printerstuurprogramma bijvoorbeeld escapes gebruikt om PostScript-injectiepunten te ondersteunen. Of een toepassing moet mogelijk het telefoonnummer van een faxapparaat verkrijgen. De functie DrvEscape wordt ook gebruikt voor het aangeven van de bewerkingen die worden ondersteund door de drvDrawEscape-functie.