Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
DirectWrite biedt toegang tot de verzameling lettertype van het systeem met behulp van de methode IDWriteFactory::GetSystemFontCollection. Dit is de lettertypeverzameling die het meest wordt gebruikt. Sommige toepassingen moeten echter lettertypen gebruiken die niet op het systeem zijn geïnstalleerd, zoals van opgenomen lettertypebestanden of lettertypebestanden die zijn ingesloten in de toepassing.
Als de gewenste lettertypen zich niet in de systeemlettertypeverzameling bevinden, kunt u een aangepaste lettertypeverzameling maken die is afgeleid van IDWriteFontCollection.
Dit overzicht bestaat uit de volgende onderdelen:
- een lettertypeverzamelingslaadprogramma registreren en de registratie ervan ongedaan maken
- IDWriteFontCollectionLoader
- IDWriteFontFileEnumerator
- CreateCustomFontFileReference
- IDWriteFontFileLoader
- IDWriteFontFileStream-
Een lettertypeverzamelingslaadprogramma registreren en de registratie ervan ongedaan maken
U registreert een lettertypeverzamelingslaadprogramma met behulp van de methode IDWriteFactory::RegisterFontCollectionLoader en geeft deze door aan een IDWriteFontCollectionLoader interface die door de toepassing is geïmplementeerd als een singleton-object. Met dit object worden de lettertypen geladen wanneer de aangepaste verzameling wordt aangevraagd. Zowel de systeemlettertypeverzameling als aangepaste lettertypeverzamelingen worden in de cache opgeslagen, zodat de lettertypen slechts één keer worden geladen.
Het lettertypeverzamelingslaadprogramma moet uiteindelijk worden uitgepakt met behulp van de IDWriteFactory::UnregisterFontCollectionLoader.
Notitie
Het registreren van het lettertypeverzamelingslaadprogramma voegt toe aan het referentieaantal; roep UnregisterFontCollectionLoader niet aan vanuit de destructor of het verzamelingslaadprogrammaobject wordt nooit uitgeschreven.
IDWriteFontCollectionLoader
U maakt een IDWriteFontFileEnumerator--object met behulp van de IDWriteFactory::CreateCustomFontCollection en deze door te geven aan een door de toepassing gedefinieerde sleutel. De sleutel is een ongeldige aanwijzer en het gegevenstype, de notatie en de betekenis worden gedefinieerd door de toepassing en zijn ondoorzichtig voor het lettertypesysteem.
Terwijl de sleutel van alles kan zijn, vereist DirectWrite dat elke sleutel beide is:
- Uniek voor één lettertypeverzameling binnen het bereik van het laadprogramma.
- Geldig totdat de registratie van het laadprogramma is opgeheven met behulp van de fabriek.
Wanneer de methode CreateCustomFontCollection wordt aangeroepen, roept DirectWrite terug naar een IDWriteFontCollectionLoader interface geïmplementeerd als een singleton-object door de toepassing. De IDWriteFontCollectionLoader::CreateEnumeratorFromKey callback-methode wordt gebruikt door DirectWrite om een IDWriteFontFileEnumerator op te halen object dat door de toepassing is geïmplementeerd. Het IDWriteFactory--object dat wordt gebruikt om de verzameling te maken, wordt doorgegeven aan deze methode en moet worden gebruikt door de opsommingsfunctie voor lettertypebestanden om de IDWriteFontFile te maken objecten die in de verzameling moeten worden opgenomen.
De sleutel die aan deze methode wordt doorgegeven, identificeert de lettertypeverzameling en is dezelfde sleutel die wordt doorgegeven aan CreateCustomFontCollection.
IDWriteFontFileEnumerator
De toepassingsgedefinieerde IDWriteFontFileEnumerator object dat is gemaakt door de methode CreateEnumeratorFromKey wordt gebruikt om de lettertypebestanden in een verzameling op te sommen en een IDWriteFontFile-object te maken object voor elk bestand. De methode IDWriteFontFileEnumerator::MoveNext wijzigt de positie in het volgende lettertypebestand. Als er een bestand op de positie staat, wordt de hasCurrentFile- ingesteld op TRUE. Anders wordt deze ingesteld op FALSE- en retourneert de methode S_OK.
Notitie
De opsommingsfunctie voor lettertypebestanden moet vóór het eerste element beginnen en bij de eerste aanroep naar MoveNext-beginnen.
Een IDWriteFontFile-object wordt uitgevoerd door de methode IDWriteFontFileEnumerator::GetCurrentFontFile methode. Als er geen lettertypebestand op de huidige positie staat, omdat MoveNext- nog niet is aangeroepen of hasCurrentFile is ingesteld op FALSE, retourneert GetCurrentFontFileE_FAIL.
CreateCustomFontFileReference
De IDWriteFontFile objectuitvoer doorGetCurrentFontFile kan worden gemaakt door IDWriteFactory::CreateCustomFontFileReferenceaan te roepen. De verwijzingssleutel voor lettertypebestanden identificeert een specifieke verwijzing naar lettertypebestanden en moet uniek zijn binnen het lettertypebestandslaadprogramma dat het bestand laadt.
IDWriteFontFileLoader
De methode CreateCustomFontFileReference gebruikt een IDWriteFontFileLoader object dat is geïmplementeerd door de toepassing die wordt gebruikt om het lettertype te laden. De IDWriteFontFileLoader::CreateStreamFromKey callback-methode wordt doorgegeven aan de sleutel en voert een IDWriteFontFileStream--object uit.
IDWriteFontFileStream
Het door de toepassing geïmplementeerde IDWriteFontFileStream-object bevat de gegevens van het lettertypebestand voor een verwijzing naar een lettertypebestand van een aangepast laadprogramma voor lettertypen. Samen met de bestandsgrootte en de laatste schrijftijd biedt het een methode (ReadFileFragment) voor het ophalen van bestandsfragmenten die moeten worden gecompileerd in een IDWriteFontFile-object.
Notitie
ReadFileFragment implementaties een fout moeten retourneren als het aangevraagde fragment buiten de bestandsgrenzen valt.
Een IDWriteFontFileStream kan de inhoud van het lettertypebestand overal ophalen, zoals de lokale harde schijf of ingesloten resources.