Udostępnij za pośrednictwem


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

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.