(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

Benutzerdefinierte Schriftartsammlungen

DirectWrite bietet über die IDWriteFactory::GetSystemFontCollection-Methode Zugriff auf die Systemschriftartsammlungen. Dies ist die am häufigsten verwendete Schriftartsammlung. Einige Anwendungen müssen jedoch Schriftarten verwenden, die nicht auf dem System installiert sind, z. B. von eingeschlossenen Schriftartendateien oder Schriftartendateien, die in die Anwendung eingebettet wurden.

Wenn die gewünschten Schriftarten nicht in der Systemschriftartsammlung enthalten sind, können Sie eine von der IDWriteFontCollection abgeleitete benutzerdefinierte Schriftartsammlung erstellen.

Diese Übersicht umfasst die folgenden Abschnitte:

Registrieren und Aufheben der Registrierung eines Schriftartsammlungs-Ladeprogramms

Sie registrieren ein Schriftartsammlungs-Ladeprogramm, indem Sie die IDWriteFactory::RegisterFontCollectionLoader-Methode verwenden und ihr eine IDWriteFontCollectionLoader-Schnittstelle übergeben, die von der Anwendung als Singletonobjekt implementiert wird. Dieses Objekt lädt die Schriftarten, wenn die benutzerdefinierte Sammlung angefordert wird. Sowohl die Systemschriftartsammlung als auch die benutzerdefinierte Schriftartsammlungen werden zwischengespeichert, sodass die Schriftarten nur einmal geladen werden.

Das Schriftartsammlungs-Ladeprogramm muss schließlich mit der IDWriteFactory::UnregisterFontCollectionLoader entladen werden.

Hinweis  Das Registrieren des Schriftartsammlungs-Ladeprogramms führt zur Erhöhung des Verweiszählers; rufen Sie UnregisterFontCollectionLoader nicht innerhalb des Destruktors auf, da die Registrierung des Sammlungsladeprogramm-Objekt sonst nie aufgehoben wird.

IDWriteFontCollectionLoader

Sie erstellen ein IDWriteFontFileEnumerator-Objekt, indem Sie IDWriteFactory::CreateCustomFontCollection verwenden und ihr 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 Schriftartsystem nicht transparent.

Der Schlüssel kann beliebig sein, DirectWrite erfordert jedoch, dass für jeden Schlüssel folgende Voraussetzungen erfüllt werden:

  • Sie müssen im Umfang des Ladeprogramms für eine einzelne Schriftartsammlung eindeutig sein.
  • Sie müssen so lange gültig sein, bis das Ladeprogramm mit der Factory deregistriert wird.

Wenn die CreateCustomFontCollection-Methode aufgerufen wird, führt DirectWrite einen Rückruf an eine IDWriteFontCollectionLoader-Schnittstelle durch, die von der Anwendung als Singleton-Objekt implementiert wird. Die IDWriteFontCollection::CreateEnumeratorFromKey-Rückrufmethode wird von DirectWrite zum Abrufen eines IDWriteFontFileEnumerator-Objekts verwendet, das von der Anwendung implementiert wird. Das IDWriteFactory-Objekt, das zum Erstellen der Sammlung verwendet wird, wird an diese Methode übergeben und muss von der Schriftartdatei-Aufzählung zum Erstellen der IDWriteFontFile-Objekte verwendet werden, die in die Sammlung aufgenommen werden sollen.

Der an diese Methode übergebene Schlüssel identifiziert die Schriftartsammlung und ist der gleiche 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 Sammlung aufzulisten, wobei für jede Datei ein IDWriteFontFile-Objekt erstellt wird. Die IDWriteFontFileEnumerator::MoveNext-Methode ändert die Position in die nächste Schriftartendatei. Wenn an dieser Position eine Datei vorhanden ist, legt sie hasCurrentFile auf TRUE fest. Andernfalls wird FALSE festgelegt, und die Methode gibt S_OK zurück.

Hinweis  Der Schriftartendatei-Enumerator muss vor dem ersten Element gestartet und beim ersten Aufruf von MoveNext vorgerückt werden.

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

CreateCustomFontFileReference

Das IDWriteFontFile-Objekt, das von GetCurrentFontFile ausgegeben wird, kann durch das Aufrufen von IDWriteFactory::CreateCustomFontFileReference erstellt werden. Der Schriftartendatei-Verweisschlüssel identifiziert einen bestimmten Schriftartendateiverweis und muss innerhalb des Schriftartendatei-Ladeprogramms, das die Datei lädt, eindeutig sein.

IDWriteFontFileLoader

Die CreateCustomFontFileReference-Methode übernimmt ein IDWriteFontFileLoader-Objekt, das von der Anwendung implementiert wird, die zum Laden der Schriftart verwendet wird. Der Schlüssel wird an die IDWriteFontFileLoader::CreateStreamFromKey-Rückrufmethode übergeben, die ein IDWriteFontFileStream-Objekt ausgibt.

IDWriteFontFileStream

Das von der Anwendung implementierte IDWriteFontFileStream-Objekt stellt die Schriftartdateidaten für einen Schriftartdateiverweis aus einem benutzerdefinierten Schriftartdatei-Ladeprogramm bereit. Zusammen mit der Dateigröße und der letzten Schreibzeit stellt es eine Methode (ReadFileFragment) zum Abrufen von Dateifragmenten bereit, 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 Schriftartendatei-Inhalt von überall her abrufen, z. B. vom lokalen Festplattenlaufwerk oder aus eingebetteten Ressourcen.

Beispielcode

Beispielcode ist im Beispiel für benutzerdefinierte Schriftarten verfügbar, bei dem eine benutzerdefinierte Sammlung von Schriftarten verwendet wird, die als Ressource in die ausführbare Datei eingebettet sind.

 

 

Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)
Vielen Dank für Ihr Feedback.
Microsoft führt eine Onlineumfrage durch, um Ihre Meinung zur MSDN-Website zu erfahren. Wenn Sie sich zur Teilnahme entscheiden, wird Ihnen die Onlineumfrage angezeigt, sobald Sie die MSDN-Website verlassen.

Möchten Sie an der Umfrage teilnehmen?
Anzeigen:
© 2014 Microsoft. Alle Rechte vorbehalten.