Vlastní kolekce písem (Windows 7/8)
DirectWrite poskytuje přístup k systémové kolekci písem pomocí metody IDWriteFactory::GetSystemFontCollection. Toto je kolekce písem, která se nejčastěji používá. Některé aplikace ale musí používat písma, která nejsou v systému nainstalovaná, například ze zahrnutých souborů písem nebo souborů písem vložených do aplikace.
Pokud požadovaná písma nejsou v systémové kolekci písem, můžete vytvořit vlastní kolekci písem odvozenou z IDWriteFontCollection.
Tento přehled se skládá z následujících částí:
- registrace a zrušení registrace zavaděče kolekce písem
- IDWriteFontCollectionLoader
- IDWriteFontFileEnumerator
- CreateCustomFontFileReference
- IDWriteFontFileLoader
- IDWriteFontFileStream
Registrace a zrušení registrace zavaděče kolekce písem
Zavaděč kolekce písem zaregistrujete pomocí metody IDWriteFactory::RegisterFontCollectionLoader metoda a předáte ji IDWriteFontCollectionLoader rozhraní implementované aplikací jako objekt singleton. Tento objekt načte písma při vyžádání vlastní kolekce. Systémová kolekce písem i vlastní kolekce písem se ukládají do mezipaměti, takže se písma načtou jenom jednou.
Zavaděč kolekce písem musí být nakonec uvolněn pomocí IDWriteFactory::UnregisterFontCollectionLoader.
Poznámka
Registrace zavaděče kolekce písem se přidá do počtu odkazů; nevolejte UnregisterFontCollectionLoader z destruktoru nebo objekt zavaděče kolekce nebude nikdy zrušena registrace.
IDWriteFontCollectionLoader
Vytvoříte objekt IDWriteFontFileEnumerator pomocí IDWriteFactory::CreateCustomFontCollection a předáte ho klíč definovaný aplikacím. Klíč je ukazatel void a datový typ, formát a význam jsou definovány aplikací a jsou neprůkazné pro systém písem.
Vzhledem k tomu, že klíč může být cokoli, DirectWrite vyžaduje, aby každý klíč byl oba:
- Jedinečné pro jednu kolekci písem v rámci zavaděče.
- Platnost platí, dokud se zavaděč neregistruje pomocí továrny.
Pokud je volána metoda CreateCustomFontCollection, DirectWrite volá zpět do IDWriteFontCollectionLoader rozhraní implementované jako objekt singleton aplikací. Metoda IDWriteFontCollectionLoader::CreateEnumeratorFromKey metodu zpětného volání používá DirectWrite k načtení IDWriteFontFileEnumerator objekt implementovaný aplikací. IDWriteFactory objekt, který se používá k vytvoření kolekce, je předán této metodě a měl by být použit enumerátorem souboru písma k vytvoření IDWriteFontFile objekty, které mají být zahrnuty do kolekce.
Klíč předaný této metodě identifikuje kolekci písem a je stejný klíč předán CreateCustomFontCollection.
IDWriteFontFileEnumerator
IDWriteFontFileEnumerator objekt, který byl vytvořen metodou CreateEnumeratorFromKey slouží k vytvoření výčtu souborů písem v kolekci a vytvoření IDWriteFontFile objektu pro každý soubor. IDWriteFontFileEnumerator::MoveNext metoda změní pozici na další soubor písma. Pokud je soubor na pozici, nastaví hasCurrentFile na TRUE. Jinak bude nastavena na FALSE a metoda vrátí S_OK.
Poznámka
Enumerátor souboru písma musí začínat před prvním prvkem a upřesňující při prvním volání MoveNext.
IDWriteFontFile objekt je výstupem IDWriteFontFileEnumerator::GetCurrentFontFile metoda. Pokud na aktuální pozici není žádný soubor písma, protože MoveNext dosud nebyl volán nebo hasCurrentFile byl nastaven na FALSE, pak GetCurrentFontFile vrátí E_FAIL.
CreateCustomFontFileReference
Výstup objektu IDWriteFontFile výstupemGetCurrentFontFile lze vytvořit voláním IDWriteFactory::CreateCustomFontFileReference. Referenční klíč souboru písma identifikuje konkrétní odkaz na soubor písma a musí být jedinečný v rámci zavaděče písem, který soubor načte.
IDWriteFontFileLoader
Metoda CreateCustomFontFileReference přebírá IDWriteFontFileLoader objekt implementovaný aplikací, která se používá k načtení písma. IDWriteFontFileLoader::CreateStreamFromKey metoda zpětného volání je předán klíč a výstupy IDWriteFontFileStream objektu.
IDWriteFontFileStream
Aplikace implementovaná IDWriteFontFileStream objekt poskytuje data souboru písma pro odkaz na soubor písma z vlastního zavaděče souborů písem. Společně s velikostí souboru a časem posledního zápisu poskytuje metodu (ReadFileFragment) pro načtení fragmentů souborů, které se mají zkompilovat do IDWriteFontFile objektu.
Poznámka
ReadFileFragment implementace by měly vrátit chybu, pokud je požadovaný fragment mimo hranice souboru.
IDWriteFontFileStream může obsah souboru písma získat odkudkoli, například místní pevný disk nebo vložené prostředky.