Schrifterstellung und -auswahl
Das Dialogfeld Schriftart allgemein vereinfacht das Erstellen und Auswählen von Schriftarten. Durch Initialisieren der CHOOSEFONT-Struktur und Aufrufen der CHOOSEFONT-Funktion kann eine Anwendung dieselbe Schriftartenauswahlschnittstelle unterstützen, die zuvor viele Zeilen benutzerdefinierten Codes erforderte. (Weitere Informationen zum Dialogfeld "Schriftart allgemein" finden Sie unter Common Dialog Box Library.)
Auswahl durch den Benutzer
Die meisten Schriftartenerstellungs- und Auswahlvorgänge beziehen den Benutzer ein. Mit Textverarbeitungsanwendungen können Benutzer beispielsweise eindeutige Schriftarten für Überschriften, Fußnoten und Textkörper auswählen. Nachdem der Benutzer eine Schriftart mithilfe des Dialogfelds Schriftart ausgewählt und die Schaltfläche OK gedrückt hat, initialisiert die CHOOSEFONT-Funktion die Elemente einer LOGFONT-Struktur mit den Attributen der angeforderten Schriftart. Um diese Schriftart für Textausgabevorgänge zu verwenden, muss eine Anwendung zuerst eine logische Schriftart erstellen und diese Schriftart dann im Gerätekontext auswählen. Eine logische Schriftart ist eine von der Anwendung bereitgestellte Beschreibung einer idealen Schriftart. Ein Entwickler kann eine logische Schriftart erstellen, indem er die Funktionen CreateFont oder CreateFontIndirect aufruft . In diesem Fall ruft die Anwendung CreateFontIndirect auf und gibt einen Zeiger auf die von CHOOSEFONT initialisierte LOGFONT-Struktur an. 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 zwischen den intern auf dem Gerät gespeicherten Schriftarten und den Schriftarten finden, deren Ressourcen in das Betriebssystem geladen wurden. Die auf dem Gerät oder im Betriebssystem gespeicherten Schriftarten werden als physische Schriftarten bezeichnet. Der Prozess zum Suchen der physischen Schriftart, die einer angegebenen logischen Schriftart am ehesten entspricht, wird als Schriftartzuordnung bezeichnet. Dieser Prozess tritt auf, wenn eine Anwendung die SelectObject-Funktion aufruft und ein Handle bereitstellt, das eine logische Schriftart identifiziert. Die Schriftartenzuordnung wird mithilfe eines internen Algorithmus durchgeführt, der die Attribute der angeforderten logischen Schriftart mit den Attributen verfügbarer physischer Schriftarten vergleicht. Wenn der Schriftartenzuordnungsalgorithmus seine Suche abgeschlossen und die nächstmögliche Übereinstimmung bestimmt, gibt die SelectObject-Funktion zurück, und die Anwendung kann mit dem Zeichnen von Text mit der neuen Schriftart beginnen.
Die SetMapperFlags-Funktion gibt an, ob der Schriftartenzuordnungsalgorithmus nur nach physischen Schriftarten mit Seitenverhältnissen sucht, die dem physischen Gerät entsprechen. Das Seitenverhältnis für ein Gerät ist das Verhältnis, das von der Breite und der 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 Schriftartenauswahlvorgänge den Benutzer betreffen, gibt es einige Fälle, in denen dies nicht der Fall ist. Beispielsweise kann ein Entwickler eine eindeutige Schriftart in einer Anwendung verwenden, um Text in einem Steuerelementfenster zu zeichnen. Um eine geeignete Schriftart auszuwählen, muss die Anwendung in der Lage sein, zu bestimmen, welche Schriftarten verfügbar sind, eine logische Schriftart zu erstellen, die eine dieser verfügbaren Schriftarten beschreibt, und diese Schriftart dann im entsprechenden Gerätekontext auswählen.
Eine Anwendung kann die verfügbaren Schriftarten mithilfe der Funktionen EnumFonts oder EnumFontFamilies auflisten. EnumFontFamilies wird empfohlen, da es alle Stile aufzählt, die einem Familiennamen zugeordnet sind. Dies kann für Schriftarten mit vielen oder ungewöhnlichen Stilen und für Schriftarten nützlich sein, die internationale Grenzen überschreiten.
Sobald eine Anwendung die verfügbaren Schriftarten aufgelistet und eine entsprechende Übereinstimmung gefunden hat, sollte sie die von der Schriftartenumeration zurückgegebenen Werte verwenden, um die Member einer LOGFONT-Struktur zu initialisieren. Anschließend kann sie die CreateFontIndirect-Funktion aufrufen und einen Zeiger auf die initialisierte LOGFONT-Struktur übergeben. Wenn die CreateFontIndirect-Funktion erfolgreich ist, kann die Anwendung die logische Schriftart auswählen, indem sie die SelectObject-Funktion aufruft . Achten Sie beim Initialisieren der Member der LOGFONT-Struktur darauf, einen bestimmten Zeichensatz im lfCharSet-Element anzugeben. Dieser Member ist bei der Schriftartenzuordnung wichtig, und die Ergebnisse sind inkonsistent, wenn dieser Member nicht ordnungsgemäß initialisiert wird. Wenn Sie einen Schriftartnamen im lfFaceName-Member der LOGFONT-Struktur angeben, stellen Sie sicher, dass der lfCharSet-Wert mit dem Zeichensatz der in lfFaceName angegebenen Schriftart übereinstimmt. 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 haben zwei Schriftartnamen: einen englischen namen und einen lokalisierten Namen. CreateFont, CreateFontIndirect und CreateFontIndirectEx verwenden den lokalisierten Schriftartnamen für ein Systemgebietsschema, das der Sprache entspricht, aber sie verwenden den englischen Schriftartnamen für alle anderen Systemgebietsschemas. Die beste Methode besteht darin, einen Namen auszuprobieren und bei Einem Fehler den anderen zu versuchen. Beachten Sie, dass EnumFonts, EnumFontFamilies und EnumFontFamiliesEx den namen der englischen Schriftart zurückgeben, wenn das Systemgebietsschema nicht mit der Sprache der Schriftart übereinstimmt. Ab Windows 2000 ist dies kein Problem mehr, da die Schriftartenzuordnung für CreateFont, CreateFontIndirect und CreateFontIndirectEx beide Schriftartnamen unabhängig vom Gebietsschema erkennt.