Benutzerdefinierte Schriftartsammlungen (Windows 7/8)

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

Wenn sich die von Ihnen benötigten Schriftarten nicht in der Auflistung der Systemschriftarten befinden, können Sie eine benutzerdefinierte Schriftartenauflistung erstellen, die von IDWriteFontCollection abgeleitet wurde.

Diese Übersicht besteht aus den folgenden Teilen:

Registrieren und Aufheben der Registrierung eines Loaders für Schriftartenauf auflistungen

Sie registrieren ein Schriftartsammlungsladeprogramm mithilfe der IDWriteFactory::RegisterFontCollectionLoader-Methode und übergeben ihm eine IDWriteFontCollectionLoader-Schnittstelle, die von der Anwendung als Singletonobjekt implementiert wird. Dieses Objekt wird die Schriftarten laden, wenn die benutzerdefinierte Auflistung angefordert wird. Sowohl die Auflistung der Systemschriftarten 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

Wenn Sie das Lader für die Schriftartsammlung registrieren, wird die Verweisanzahl erhöht. Rufen Sie UnregisterFontCollectionLoader nicht innerhalb des Destruktors auf, oder die Registrierung des Auflistungsladeobjekts wird nie aufgehoben.

IDWriteFontCollectionLoader

Sie erstellen ein IDWriteFontFileEnumerator-Objekt, indem Sie IDWriteFactory::CreateCustomFontCollection verwenden und ihm einen anwendungsdefinierten Schlüssel übergeben. Der Schlüssel ist ein void-Zeiger, und Datentyp, Format und Bedeutung werden von der Anwendung definiert und sind für das Schriftartsystem nicht transparent.

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

  • Eindeutig für eine einzelne Schriftartenauf auflistung innerhalb des Bereichs des Ladefelds.
  • Gültig, bis die Registrierung des Ladeers mithilfe der Factory aufgehoben wird.

Wenn die CreateCustomFontCollection-Methode aufgerufen wird, ruft DirectWrite eine IDWriteFontCollectionLoader-Schnittstelle zurück, 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 Schriftartsammlung 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 zu aufzählen und ein IDWriteFontFile-Objekt für jede Datei zu erstellen. Die IDWriteFontFileEnumerator::MoveNext-Methode ändert die Position in die nächste Schriftartdatei. Wenn sich an der Position eine Datei befindet, wird hasCurrentFile auf TRUE festgelegt. Andernfalls wird sie 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 vorkommt, weil MoveNext noch nicht aufgerufen wurde oder hasCurrentFile auf FALSE festgelegt wurde, gibt GetCurrentFontFile E FAIL _ zurück.

CreateCustomFontFileReference

Das IDWriteFontFile-Objekt, das von GetCurrentFontFile ausgegeben wird, kann durch Aufrufen von IDWriteFactory::CreateCustomFontFileReference erstellt werden. Der Verweisschlüssel der Schriftartdatei identifiziert einen bestimmten Schriftartdateiverweis und muss innerhalb des Ladefelds der Schriftartdatei, das die Datei laden soll, 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 an 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 zur Anwendung. Zusammen mit der Dateigröße und dem Zeitpunkt des letzten Schreibzugriffs wird eine Methode (ReadFileFragment) zum Abrufen von Dateifragmenten zur Kompilierung in ein IDWriteFontFile-Objekt angegeben.

Hinweis

ReadFileFragment-Implementierungen sollten einen Fehler zurückgeben, wenn sich das angeforderte Fragment außerhalb der Dateigrenze befindet.

Ein IDWriteFontFileStream kann den Inhalt der Schriftartdatei von einem beliebigen Ort wie der lokalen Festplatte oder eingebetteten Ressourcen erhalten.