Schriftarterstellung 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 Schriftartauswahlschnittstelle unterstützen, die zuvor viele Zeilen benutzerdefinierten Codes erforderte. (Weitere Informationen zum Allgemeinen Dialogfeld Schriftart finden Sie unter Allgemeine Dialogfeldbibliothek.)
Auswahl durch den Benutzer
Die meisten Schriftarterstellungs- und Auswahlvorgänge beziehen den Benutzer ein. Beispielsweise kann der Benutzer mit Textverarbeitungsanwendungen eindeutige Schriftarten für Überschriften, Fußnoten und Textkörper auswählen. Nachdem der Benutzer mithilfe des Dialogfelds Schriftart eine Schriftart ausgewählt und die Schaltfläche OK gedrückt hat, initialisiert die CHOOSEFONT-Funktion die Member 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 würde die Anwendung CreateFontIndirect aufrufen und einen Zeiger auf die LOGFONT-Struktur liefern, die durch CHOOSEFONT initialisiert wurde. Im Allgemeinen ist der Aufruf von CreateFontIndirect effizienter, da CreateFont mehrere Parameter erfordert, während CreateFontIndirect nur einen Zeiger auf LOGFONT erfordert.
Bevor eine Anwendung mit dem Zeichnen von Text mit einer logischen Schriftart beginnen kann, muss sie die nächstgelegene Übereinstimmung aus 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 der Suche nach der physischen Schriftart, die einer angegebenen logischen Schriftart am besten entspricht, wird als Schriftartzuordnung bezeichnet. Dieser Prozess tritt auf, wenn eine Anwendung die SelectObject-Funktion aufruft und ein Handle zur Identifizierung einer logischen Schriftart liefert. Die Schriftartzuordnung erfolgt mithilfe eines internen Algorithmus, der die Attribute der angeforderten logischen Schriftart mit den Attributen verfügbarer physischer Schriftarten vergleicht. Wenn der Schriftartzuordnungsalgorithmus seine Suche abgearbeitet und die nächste mögliche Übereinstimmung ermittelt, 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 Schriftartzuordnungsalgorithmus nur nach physischen Schriftarten mit Seitenverhältnis sucht, die mit dem physischen Gerät übereinstimmen. Das Seitenverhältnis für ein Gerät ist das Verhältnis, das durch die Breite und 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.
Besondere Überlegungen zur Schriftartauswahl
Obwohl die meisten Schriftartauswahlvorgänge den Benutzer betreffen, gibt es einige Fälle, in denen dies nicht zutrifft. 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 ermitteln können, welche Schriftarten verfügbar sind, eine logische Schriftart 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 aufzählen. 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.
Nachdem eine Anwendung die verfügbaren Schriftarten aufgelistet und eine entsprechende Übereinstimmung gefunden hat, sollte sie die von der Schriftartenumerationsfunktion zurückgegebenen Werte verwenden, um die Member einer LOGFONT-Struktur zu initialisieren. Anschließend kann er 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. Stellen Sie beim Initialisieren der Member der LOGFONT-Struktur sicher, dass Sie einen bestimmten Zeichensatz im lfCharSet-Member angeben. Dieser Member ist bei der Schriftartzuordnung 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 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 haben zwei Schriftartnamen: einen englischen Namen und einen lokalisierten Namen. CreateFont, CreateFontIndirectund CreateFontIndirectEx verwenden den lokalisierten Schriftartnamen für ein System locale, das der Sprache entspricht, aber sie verwenden den englischen Schriftartnamen für alle anderen Systemverzeichnisse. Die beste Methode ist, einen Namen auszuprobieren und bei einem Fehler den anderen zu versuchen. Beachten Sie, dass EnumFonts, EnumFontFamiliesund EnumFontFamiliesEx den englischen Schriftartnamen zurückgeben, wenn das System locale nicht mit der Sprache der Schriftart übereinstimmen. Ab Windows 2000 ist dies kein Problem mehr, da die Schriftartzuordnung für CreateFont, CreateFontIndirectund CreateFontIndirectEx beide Schriftartnamen erkennt, unabhängig vom Lokalen.