Kolekcje czcionek niestandardowych (Windows 7/8)
DirectWrite zapewnia dostęp do kolekcji czcionek systemowych przy użyciu metody IDWriteFactory::GetSystemFontCollection. Jest to kolekcja czcionek, która jest najczęściej używana. Jednak niektóre aplikacje muszą używać czcionek, które nie są zainstalowane w systemie, na przykład z dołączonych plików czcionek lub plików czcionek osadzonych w aplikacji.
Jeśli żądane czcionki nie znajdują się w kolekcji czcionek systemowych, możesz utworzyć niestandardową kolekcję czcionek pochodzącą z IDWriteFontCollection.
To omówienie składa się z następujących części:
- rejestrowanie i wyrejestrowywanie modułu ładującego kolekcji czcionek
- IDWriteFontCollectionLoader
- IDWriteFontFileEnumerator
- CreateCustomFontFileReference
- IDWriteFontFileLoader
- IDWriteFontFileStream
Rejestrowanie i wyrejestrowywanie modułu ładującego kolekcji czcionek
Moduł ładujący kolekcji czcionek należy zarejestrować przy użyciu IDWriteFactory::RegisterFontCollectionLoader metody i przekazać do niej interfejsIDWriteFontCollectionLoader implementowany przez aplikację jako obiekt pojedynczy. Ten obiekt załaduje czcionki po zażądaniu kolekcji niestandardowej. Zarówno kolekcja czcionek systemowych, jak i kolekcje czcionek niestandardowych są buforowane, więc czcionki są ładowane tylko raz.
Moduł ładujący kolekcji czcionek musi zostać ostatecznie zwolniony przy użyciu IDWriteFactory::UnregisterFontCollectionLoader.
Nuta
Rejestrowanie modułu ładującego kolekcji czcionek dodaje do liczby odwołań; Nie należy wywoływać UnregisterFontCollectionLoader z poziomu destruktora lub obiekt modułu ładującego kolekcji nigdy nie zostanie wyrejestrowany.
IDWriteFontCollectionLoader
Utworzysz obiektidWriteFontFileEnumeratorprzy użyciu IDWriteFactory::CreateCustomFontCollection i przekazania go klucza zdefiniowanego przez aplikację. Klucz jest wskaźnikiem pustki, a typ danych, format i znaczenie są definiowane przez aplikację i są nieprzezroczyste w systemie czcionek.
Klucz może być dowolny, DirectWrite wymaga, aby każdy klucz był oba:
- Unikatowy dla pojedynczej kolekcji czcionek w zakresie modułu ładującego.
- Ważne, dopóki moduł ładujący nie zostanie wyrejestrowany przy użyciu fabryki.
Gdy wywoływana jest metoda CreateCustomFontCollection, DirectWrite wywołuje z powrotem do interfejsu IDWriteFontCollectionLoad er zaimplementowanego jako pojedynczy obiekt przez aplikację. Metoda IDWriteFontCollectionLoader::CreateEnumeratorFromKey wywołania zwrotnego jest używana przez funkcję DirectWrite do pobierania obiektu IDWriteFontFileEnumerator zaimplementowanego przez aplikację. Obiekt IDWriteFactory używany do tworzenia kolekcji jest przekazywany do tej metody i powinien być używany przez moduł wyliczający pliku czcionek w celu utworzenia obiektówIDWriteFontFile, które mają zostać uwzględnione w kolekcji.
Klucz przekazany do tej metody identyfikuje kolekcję czcionek i jest tym samym kluczem przekazanym do CreateCustomFontCollection.
IDWriteFontFileEnumerator
Zdefiniowany przez aplikację obiekt IDWriteFontFileEnumerator utworzony przez metodę CreateEnumeratorFrom Key służy do wyliczania plików czcionek w kolekcji, tworząc obiekt IDWriteFontFile dla każdego pliku. Metoda IDWriteFontFileEnumerator::MoveNext zmienia położenie na następny plik czcionki. Jeśli plik znajduje się w tej pozycji, ustawi hasCurrentFile na wartość TRUE. W przeciwnym razie zostanie ustawiona wartość FALSE, a metoda zwróci S_OK.
Nuta
Moduł wyliczający pliku czcionek musi rozpocząć pozycjonowanie przed pierwszym elementem i zaawansowane przy pierwszym wywołaniu, aby MoveNext.
Obiekt IDWriteFontFile jest zwracany przez metodę IDWriteFontFileEnumerator::GetCurrentFontFile. Jeśli nie ma pliku czcionki w bieżącym położeniu, ponieważ MoveNext nie został jeszcze wywołany lub hasCurrentFile został ustawiony na FALSE, GetCurrentFontFile zwróci E_FAIL.
CreateCustomFontFileReference
Dane wyjściowe obiektu IDWriteFontFile przezGetCurrentFontFile można utworzyć, wywołując IDWriteFactory::CreateCustomFontFileReference. Klucz odwołania do pliku czcionki identyfikuje określone odwołanie do pliku czcionki i musi być unikatowy w module ładujący pliku czcionek, który załaduje plik.
IDWriteFontFileLoader
Metoda CreateCustomFontFileReference przyjmuje obiekt IDWriteFontFileLoad er zaimplementowany przez aplikację, która służy do ładowania czcionki. Metoda IDWriteFontFileLoader::CreateStreamFromKey wywołania zwrotnego jest przekazywana klucz i zwraca obiekt IDWriteFontFileStream.
IDWriteFontFileStream
Zaimplementowany przez aplikację obiekt IDWriteFontFileStream udostępnia dane pliku czcionek dla odwołania do pliku czcionki z niestandardowego modułu ładującego pliki czcionek. Wraz z rozmiarem pliku i czasem ostatniego zapisu udostępnia metodę (ReadFileFragment) na potrzeby pobierania fragmentów plików, które mają zostać skompilowane w obiekcie IDWriteFontFile.
Nuta
implementacje readFileFragment powinny zwrócić błąd, jeśli żądany fragment znajduje się poza granicami pliku.
IDWriteFontFileStream może pobrać zawartość pliku czcionki z dowolnego miejsca, takiego jak lokalny dysk twardy lub zasoby osadzone.