Freigeben über


Benutzerdefinierte Schriftartsammlungen (Windows 7/8)

DirectWrite ermöglicht den Zugriff auf die Systemschriftartensammlung mithilfe der IDWriteFactory::GetSystemFontCollection-Methode. Dies ist die Schriftartensammlung, die am häufigsten verwendet wird. Einige Anwendungen müssen jedoch Schriftarten verwenden, die nicht auf dem System installiert sind, z. B. aus enthaltenen Schriftartdateien oder in die Anwendung eingebetteten Schriftartdateien.

Wenn sich die gewünschten Schriftarten nicht in der Systemschriftartensammlung befinden, können Sie eine benutzerdefinierte Schriftartensammlung erstellen, die von IDWriteFontCollection abgeleitet ist.

Diese Übersicht besteht aus den folgenden Teilen:

Registrieren und Aufheben der Registrierung eines Font Collection Loaders

Sie registrieren ein Schriftartensammlungsladeprogramm, indem Sie die IDWriteFactory::RegisterFontCollectionLoader-Methode verwenden und eine IDWriteFontCollectionLoader-Schnittstelle übergeben, die von der Anwendung als Singleton-Objekt implementiert wird. Dieses Objekt lädt die Schriftarten, wenn die benutzerdefinierte Auflistung angefordert wird. Sowohl die Systemschriftartensammlung als auch benutzerdefinierte Schriftartensammlungen werden zwischengespeichert, sodass die Schriftarten nur einmal geladen werden.

Das Ladeprogramm für die Schriftartsammlung muss schließlich mithilfe von IDWriteFactory::UnregisterFontCollectionLoader entladen werden.

Hinweis

Durch die Registrierung des Ladeprogramms für die Schriftartsammlung wird der Verweisanzahl hinzugefügt. Rufen Sie UnregisterFontCollectionLoader nicht innerhalb des Destruktors auf, oder das Sammlungsladeprogrammobjekt wird die Registrierung nie aufgehoben.

 

IDWriteFontCollectionLoader

Sie erstellen ein IDWriteFontFileEnumerator-Objekt , indem Sie idWriteFactory::CreateCustomFontCollection verwenden und einen anwendungsdefinierten Schlüssel übergeben. Der Schlüssel ist ein Void-Zeiger, und der Datentyp, das Format und die Bedeutung werden von der Anwendung definiert und sind für das Schriftartensystem undurchsichtig.

Während der Schlüssel beliebig sein kann, erfordert DirectWrite, dass jeder Schlüssel beides ist:

  • Eindeutig für eine einzelne Schriftartensammlung im Bereich des Ladeprogramms.
  • Gültig, bis die Registrierung des Ladeprogramms mithilfe der Factory aufgehoben wird.

Wenn die CreateCustomFontCollection-Methode aufgerufen wird, ruft DirectWrite eine IDWriteFontCollectionLoader-Schnittstelle auf, die von der Anwendung als Singletonobjekt implementiert wurde. Die IDWriteFontCollectionLoader::CreateEnumeratorFromKey-Rückrufmethode wird von DirectWrite verwendet, um ein von der Anwendung implementiertes IDWriteFontFileEnumerator-Objekt abzurufen. Das IDWriteFactory-Objekt , das zum Erstellen der Auflistung verwendet wird, wird an diese Methode übergeben und sollte vom Enumerator der Schriftartdatei verwendet werden, um die IDWriteFontFile-Objekte zu erstellen, die in die Auflistung eingeschlossen werden sollen.

Der an diese Methode übergebene Schlüssel identifiziert die Schriftartensammlung und ist derselbe Schlüssel, der an CreateCustomFontCollection übergeben wird.

IDWriteFontFileEnumerator

Das anwendungsdefinierte IDWriteFontFileEnumerator-Objekt , das von der CreateEnumeratorFromKey-Methode erstellt wurde, wird verwendet, um die Schriftartdateien in einer Auflistung aufzulisten und für jede Datei ein IDWriteFontFile-Objekt zu erstellen. Die IDWriteFontFileEnumerator::MoveNext-Methode ändert die Position in die nächste Schriftartdatei. Wenn sich eine Datei an der Position befindet, wird hasCurrentFile auf TRUE festgelegt. Andernfalls wird er auf FALSE festgelegt, und die Methode gibt S_OK zurück.

Hinweis

Der Enumerator der Schriftartdatei muss vor dem ersten Element positioniert und beim ersten Aufruf von MoveNext erweitert werden.

 

Ein IDWriteFontFile-Objekt wird von der IDWriteFontFileEnumerator::GetCurrentFontFile-Methode ausgegeben. Wenn an der aktuellen Position keine Schriftartdatei vorhanden ist, weil MoveNext noch nicht aufgerufen wurde oder hasCurrentFile auf FALSE festgelegt wurde, gibt GetCurrentFontFileE_FAIL zurück.

CreateCustomFontFileReference

Die IDWriteFontFile-Objektausgabe vonGetCurrentFontFile kann durch Aufrufen von IDWriteFactory::CreateCustomFontFileReference erstellt werden. Der Referenzschlüssel für die Schriftartdatei identifiziert einen bestimmten Verweis auf die Schriftartdatei und muss innerhalb des Schriftartdateiladeprogramms, das die Datei lädt, eindeutig sein.

IDWriteFontFileLoader

Die CreateCustomFontFileReference-Methode verwendet ein IDWriteFontFileLoader-Objekt , das von der Anwendung implementiert wird, die zum Laden der Schriftart verwendet wird. Die IDWriteFontFileLoader::CreateStreamFromKey-Rückrufmethode wird den Schlüssel übergeben und gibt ein IDWriteFontFileStream-Objekt aus.

IDWriteFontFileStream

Das von der Anwendung implementierte IDWriteFontFileStream-Objekt stellt die Schriftartdateidaten für einen Schriftartdateiverweis aus einem benutzerdefinierten Schriftartdateiladeprogramm bereit. Zusammen mit der Dateigröße und der Letzten Schreibzeit wird eine Methode (ReadFileFragment) zum Abrufen von Dateifragmenten bereitgestellt, die in ein IDWriteFontFile-Objekt kompiliert werden sollen.

Hinweis

ReadFileFragment-Implementierungen sollten einen Fehler zurückgeben, wenn das angeforderte Fragment außerhalb der Dateigrenzen liegt.

 

Ein IDWriteFontFileStream kann den Inhalt der Schriftartdatei von überall abrufen, z. B. von der lokalen Festplatte oder eingebetteten Ressourcen.