Schriftarterstellung und Auswahl

Das allgemeine Dialogfeld "Schriftart " vereinfacht den Prozess des Erstellens und Auswählens von Schriftarten. Durch Initialisieren der CHOOSEFONT-Struktur und aufrufen der CHOOSEFONT-Funktion kann eine Anwendung dieselbe Schriftartauswahlschnittstelle unterstützen, die zuvor viele Zeilen benutzerdefinierten Codes erfordert. (Weitere Informationen zum allgemeinen Dialogfeld "Schriftart " finden Sie unter "Allgemeine Dialogfeldbibliothek".)

Auswahl des Benutzers

Die meisten Schriftarterstellungs- und Auswahlvorgänge umfassen den Benutzer. Beispielsweise können Textverarbeitungsanwendungen den Benutzer eindeutige Schriftarten für Überschriften, Fußnoten und Textkörper auswählen. Nachdem der Benutzer mithilfe des Dialogfelds "Schriftart" eine Schriftart ausgewählt hat und die SCHALTFLÄCHE "OK" drückt, initialisiert die FUNKTION SELECTFONT die Elemente einer LOGFONT-Struktur mit den Attributen der angeforderten Schriftart. Um diese Schriftart für Textausgabevorgänge zu verwenden, muss eine Anwendung zunächst eine logische Schriftart erstellen und dann diese Schriftart im Gerätekontext auswählen. Eine logische Schriftart ist eine anwendungsbezogene Beschreibung einer idealen Schriftart. Ein Entwickler kann eine logische Schriftart erstellen, indem Sie die CreateFont- oder CreateFontIndirect-Funktionen aufrufen. In diesem Fall würde die Anwendung CreateFontIndirect aufrufen und einen Zeiger auf die LOGFONT-Struktur bereitstellen, die von CHOOSEFONT initialisiert wurde. Im Allgemeinen ist es effizienter, CreateFontIndirect aufzurufen, da CreateFont mehrere Parameter erfordert, während CreateFontIndirect nur einen Zeiger auf LOGFONT erfordert.

Bevor eine Anwendung tatsächlich mit dem Zeichnen von Text mit einer logischen Schriftart beginnen kann, muss sie die nächstgelegene Übereinstimmung aus den schriftarten finden, die intern auf dem Gerät gespeichert sind, und die Schriftarten, deren Ressourcen in das Betriebssystem geladen wurden. Die schriftarten, die auf dem Gerät oder im Betriebssystem gespeichert sind, werden als physische Schriftarten bezeichnet. Der Prozess der Suche nach der physischen Schriftart, die am häufigsten mit einer angegebenen logischen Schriftart übereinstimmt, wird als Schriftartzuordnung bezeichnet. Dieser Prozess tritt auf, wenn eine Anwendung die SelectObject-Funktion aufruft und einen Handle bereitstellt, der eine logische Schriftart identifiziert. Die Schriftartzuordnung wird mithilfe eines internen Algorithmus ausgeführt, der die Attribute der angeforderten logischen Schriftart mit den Attributen der verfügbaren physischen Schriftart vergleicht. Wenn der Schriftzuordnungsalgorithmus seine Suche abgeschlossen und die nächstgelegene Übereinstimmung bestimmt, gibt die SelectObject-Funktion zurück, und die Anwendung kann mit der neuen Schriftart mit dem Zeichentext beginnen.

Die Funktion SetMapperFlags gibt an, ob der Schriftzuordnungsalgorithmus nur nach physischen Schriftarten mit Seitenverhältnis sucht, die dem physischen Gerät entsprechen. Das Seitenverhältnis für ein Gerät ist das Verhältnis, das durch die Breite und die Höhe eines Pixels auf diesem Gerät gebildet wird.

Die Systemschriftart (auch als Shell oder Standardschriftart bezeichnet) ist die Schriftart, die für Text in den Titelleisten, Menüs und Dialogfeldern verwendet wird.

Überlegungen zur Auswahl spezieller Schriftarten

Obwohl die meisten Schriftartauswahlvorgänge den Benutzer umfassen, gibt es einige Instanzen, in denen dies nicht wahr ist. Beispielsweise kann ein Entwickler eine eindeutige Schriftart in einer Anwendung verwenden, um Text in einem Steuerelementfenster zu zeichnen. Um eine entsprechende Schriftart auszuwählen, muss die Anwendung bestimmen können, welche Schriftarten verfügbar sind, eine logische Schriftart erstellen, die eine dieser verfügbaren Schriftarten beschreibt, und wählen Sie dann diese Schriftart in den entsprechenden Gerätekontext aus.

Eine Anwendung kann die verfügbaren Schriftarten mithilfe der Funktionen "EnumFonts" oder "EnumFontFamilies" aufzählen. EnumFontFamilies wird empfohlen, da alle Formatvorlagen aufgezählt werden, die einem Familiennamen zugeordnet sind. Dies kann für Schriftarten mit vielen oder ungewöhnlichen Formatvorlagen und für Schriftarten nützlich sein, die internationale Grenzen überschreiten.

Nachdem eine Anwendung die verfügbaren Schriftarten aufgezählt und eine entsprechende Übereinstimmung gefunden hat, sollte sie die werte verwenden, die von der Schriftartaufzählungsfunktion zurückgegeben werden, um die Elemente einer LOGFONT-Struktur zu initialisieren. Anschließend kann die CreateFontIndirect-Funktion aufgerufen werden, indem ein Zeiger an die initialisierte LOGFONT-Struktur übergeben wird. Wenn die Funktion "CreateFontIndirect " erfolgreich ist, kann die Anwendung dann die logische Schriftart auswählen, indem sie die SelectObject-Funktion aufruft. Stellen Sie beim Initialisieren der Elemente der LOGFONT-Struktur sicher, dass Sie einen bestimmten Zeichensatz im lfCharSet-Element angeben. Dieses Element ist im Schriftzuordnungsprozess wichtig und die Ergebnisse sind inkonsistent, wenn dieses Element nicht ordnungsgemäß initialisiert wird. Wenn Sie einen Typfacenamen im lfFaceName-Element der LOGFONT-Struktur angeben, stellen Sie sicher, dass der lfCharSet-Wert dem Zeichensatz des in lfFaceName angegebenen Zeichensatzes entspricht. Wenn Sie beispielsweise eine Schriftart wie MS Mincho auswählen möchten, muss lfCharSet auf den vordefinierten Wert SHIFTJIS_CHARSET festgelegt werden.

Die Schriftarten für viele ostasiatische Sprachen verfügen über zwei Schriftnamen: einen englischen Namen und einen lokalisierten Namen. CreateFont, CreateFontIndirect und CreateFontIndirectEx nehmen den lokalisierten Typfacenamen für ein Systemschema, das mit der Sprache übereinstimmt, aber sie nehmen den englischen Typfacenamen für alle anderen Systemschemas. Die beste Methode besteht darin, einen Namen zu versuchen, und versuchen Sie es im Fehler. Beachten Sie, dass EnumFonts, EnumFontFamilies und EnumFontFamiliesEx den englischen Typfacenamen zurückgeben, wenn das Systemschema nicht mit der Sprache der Schriftart übereinstimmt. Ab Windows 2000 ist dies kein Problem mehr, da die Schriftartzuordnung für CreateFont, CreateFontIndirect und CreateFontIndirectEx unabhängig vom Gebietsschema entweder den Namen des Typs erkennt.