Erstellung und Auswahl von Schriftarten
Das allgemeine Dialogfeld Schriftart 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 Code erforderte. (Weitere Informationen zum allgemeinen Dialogfeld Schriftart finden Sie unter Allgemeine Dialogfeldbibliothek.)
Auswahl durch den Benutzer
Die meisten Schriftartenerstellungs- und Auswahlvorgänge umfassen den Benutzer. 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 SELECTFONT-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 vom Anwendung bereitgestellte Beschreibung einer idealen Schriftart. Ein Entwickler kann eine logische Schriftart erstellen, indem die CreateFont- oder die CreateFontIndirect--Funktionen aufgerufen werden. In diesem Fall würde die Anwendung CreateFontIndirect aufrufen und einen Zeiger auf die LOGFONT- Struktur bereitstellen, die durch CHOOSEFONT-initialisiert wurde. Im Allgemeinen ist es effizienter, CreateFontIndirect- aufzurufen, da CreateFont mehrere Parameter erfordert, während CreateFontIndirect- nur einen Zeiger benötigt, um LOGFONT .
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 auf dem Gerät oder im Betriebssystem gespeicherten Schriftarten werden physische Schriftartengenannt. Der Prozess der Suche nach der physischen Schriftart, die am ehesten mit einer angegebenen logischen Schriftart übereinstimmt, wird als Schriftartenzuordnung bezeichnet. Dieser Vorgang tritt auf, wenn eine Anwendung die SelectObject--Funktion aufruft und einen Handle zur Identifizierung einer logischen Schriftart bereitstellt. Die Schriftartenzuordnung wird mithilfe eines internen Algorithmus durchgeführt, der die Attribute der angeforderten logischen Schriftart mit den Attributen der verfügbaren physischen Schriftarten vergleicht. Wenn der Schriftartzuordnungsalgorithmus 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 Schriftartzuordnungsalgorithmus nur nach physischen Schriftarten mit Seitenverhältnissen 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 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 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 bestimmen können, welche Schriftarten verfügbar sind, erstellen Sie eine logische Schriftart, die eine dieser verfügbaren Schriftarten beschreibt, und wählen Sie diese Schriftart dann im entsprechenden Gerätekontext aus.
Eine Anwendung kann die verfügbaren Schriftarten mithilfe der funktionen EnumFonts oder EnumFontFamilies aufzählen. EnumFontFamilies wird empfohlen, da alle mit einem Familiennamen verknüpften Formatvorlagen aufgelistet werden. 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 von der Schriftartenaufzählungsfunktion zurückgegebenen Werte verwenden, um die Member einer LOGFONT--Struktur zu initialisieren. Anschließend kann sie die CreateFontIndirect--Funktion aufrufen und an sie einen Zeiger an 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. Dieses Element ist im Schriftartenzuordnungsprozess wichtig, und die Ergebnisse sind inkonsistent, wenn dieses Element nicht ordnungsgemäß initialisiert wird. Wenn Sie einen Schriftartnamen im lfFaceName Member der LOGFONT- Struktur angeben, stellen Sie sicher, dass der lfCharSet-Wert dem Zeichensatz der in lfFaceNameangegebenen 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 weisen zwei Schriftarten auf: einen englischen Namen und einen lokalisierten Namen. CreateFont, CreateFontIndirect, und CreateFontIndirectEx den lokalisierten Typface-Namen für ein Systemgebietsschema verwenden, das der Sprache entspricht, sie übernehmen jedoch den namen der englischen Schriftart für alle anderen Systemgebietsschemas. Die beste Methode besteht darin, einen Namen zu versuchen, und versuchen Sie es bei einem Fehler mit dem anderen. Beachten Sie, dass EnumFonts, EnumFontFamiliesund EnumFontFamiliesEx den namen der englischen Schriftart zurückgeben, wenn das Gebietsschema nicht mit der Sprache der Schriftart übereinstimmt. Ab Windows 2000 ist dies kein Problem mehr, da die Schriftartzuordnung für CreateFont, CreateFontIndirectund CreateFontIndirectEx einen der beiden Schriftartnamen erkennt, unabhängig vom Gebietsschema.