Egyéni betűkészletek (Windows 7/8)
DirectWrite hozzáférést biztosít a rendszer betűkészletéhez az IDWriteFactory::GetSystemFontCollection metódussal. Ez a leggyakrabban használt betűtípusgyűjtemény. Egyes alkalmazásoknak azonban olyan betűtípusokat kell használniuk, amelyek nincsenek telepítve a rendszeren, például az alkalmazásba beágyazott betűtípusfájlokból vagy betűtípusfájlokból.
Ha a kívánt betűtípusok nem szerepelnek a rendszer betűtípusgyűjteményében, létrehozhat egy egyéni betűtípusgyűjteményt IDWriteFontCollection.
Ez az áttekintés a következő részekből áll:
- Font Collection Loader- regisztrálása és regisztrációja törlése
- IDWriteFontCollectionLoader
- IDWriteFontFileEnumerator
- CreateCustomFontFileReference
- IDWriteFontFileLoader
- IDWriteFontFileStream
Betűkészlet-betöltő regisztrálása és regisztrációja törlése
Egy betűkészlet-betöltőt az IDWriteFactory::RegisterFontCollectionLoader metódussal regisztrálhat, és átad egy IDWriteFontCollectionLoader felületet, amelyet az alkalmazás egyetlenton objektumként valósít meg. Ez az objektum az egyéni gyűjtemény kérésekor betölti a betűtípusokat. A rendszer betűtípusgyűjteménye és az egyéni betűkészletek is gyorsítótárazva vannak, így a betűtípusok csak egyszer töltődnek be.
A betűkészlet-betöltőt végül az IDWriteFactory::UnregisterFontCollectionLoaderhasználatával kell eltávolítani.
Jegyzet
A betűkészlet-betöltő regisztrálása hozzáadja a hivatkozásszámot; ne hívja meg UnregisterFontCollectionLoader a destruktoron belülről, vagy a gyűjteménybetöltő objektum soha nem lesz regisztrálva.
IDWriteFontCollectionLoader
Egy IDWriteFontFileEnumerator objektumot az IDWriteFactory::CreateCustomFontCollection és egy alkalmazás által definiált kulcs átadásával hozhat létre. A kulcs üres mutató, és az adattípust, formátumot és jelentést az alkalmazás határozza meg, és átlátszatlan a betűkészlet számára.
Míg a kulcs bármi lehet, DirectWrite megköveteli, hogy mindegyik kulcs mindkettő legyen:
- A betöltő hatókörén belül egyetlen betűkészletre egyedi.
- Érvényes, amíg a rakodó nincs regisztrálva a gyár használatával.
Amikor meghívja a CreateCustomFontCollection metódust, DirectWrite visszahív egy IDWriteFontCollectionLoader felületet, amelyet az alkalmazás egyetlen objektumként implementál. Az IDWriteFontCollectionLoader::CreateEnumeratorFromKey visszahívási módszert használja a DirectWrite az alkalmazás által implementált IDWriteFontFileEnumerator objektum lekéréséhez. A gyűjtemény létrehozásához használt IDWriteFactory objektumot a rendszer átadja ennek a metódusnak, és az enumerátornak kell használnia az IDWriteFontFile a gyűjteménybe felvenni kívánt objektumokat.
A metódusnak átadott kulcs azonosítja a betűkészletet, és ugyanaz a kulcs, amelyet CreateCustomFontCollection.
IDWriteFontFileEnumerator
Az alkalmazás által definiált IDWriteFontFileEnumerator objektum, amelyet a CreateEnumeratorFromKey metódus hozott létre, a gyűjteményben lévő betűtípusfájlok számbavételére szolgál, és minden fájlhoz létrehoz egy IDWriteFontFile objektumot. Az IDWriteFontFileEnumerator::MoveNext metódus a következő betűtípusfájlra módosítja a pozíciót. Ha van egy fájl a pozícióban, akkor a aCurrentFile értékre állítja IGAZ. Ellenkező esetben a hamis lesz beállítva, és a metódus S_OKad vissza.
Jegyzet
A betűtípusfájl enumerátorának az első elem előtt kell elindulnia, és a MoveNextelső hívásánál kell továbbhaladnia.
Az IDWriteFontFile objektum kimenete az IDWriteFontFileEnumerator::GetCurrentFontFile metódus. Ha nincs betűtípusfájl az aktuális pozícióban, mert MoveNext még nem lett meghívva, vagy aCurrentFile értéke HAMIS, akkor GetCurrentFontFileE_FAILad vissza.
CreateCustomFontFileReference
AzGetCurrentFontFile által IDWriteFontFile objektumkimenete IDWriteFactory::CreateCustomFontFileReferencemeghívásával hozható létre. A betűtípusfájl referenciakulcsa azonosít egy adott betűtípusfájl-hivatkozást, és egyedinek kell lennie a fájlt betöltő betűtípus-betöltőn belül.
IDWriteFontFileLoader
A CreateCustomFontFileReference metódus a betűtípus betöltésére használt alkalmazás által implementált IDWriteFontFileLoader objektumot használja. A IDWriteFontFileLoader::CreateStreamFromKey visszahívási metódus átadja a kulcsot, és egy IDWriteFontFileStream objektumot ad ki.
IDWriteFontFileStream
Az alkalmazás által implementált IDWriteFontFileStream objektum egy egyéni betűtípusfájl-betöltőből származó betűtípusfájl-hivatkozáshoz biztosítja a betűtípusfájl adatait. A fájlmérettel és az utolsó írási idővel együtt egy metódust (ReadFileFragment) biztosít a IDWriteFontFile objektumba lefordítandó fájltöredékek lekéréséhez.
Jegyzet
ReadFileFragment implementációk hibát adnak vissza, ha a kért töredék kívül esik a fájlhatárokon.
Az IDWriteFontFileStream bárhonnan lekérheti a betűtípusfájl tartalmát, például a helyi merevlemez-meghajtót vagy a beágyazott erőforrásokat.