Schriftart Erstellung und-Auswahl

Das Dialogfeld Schriftart (allgemein) vereinfacht das Erstellen und Auswählen von Schriftarten. Durch Initialisieren der selecsefont -Struktur und Aufrufen der choosefont -Funktion kann eine Anwendung dieselbe Schriftart Auswahl Schnittstelle unterstützen, die zuvor viele Zeilen von benutzerdefiniertem Code erforderte. (Weitere Informationen zum Dialogfeld Schriftart allgemein finden Sie unter allgemeine Dialogfeld Bibliothek.)

Auswahl durch den Benutzer

Die meisten Schriftart Erstellungs-und Auswahl Vorgänge betreffen den Benutzer. Beispielsweise können Benutzer mit Textverarbeitungsanwendungen eindeutige Schriftarten für Überschriften, Fußnoten und Textkörper Text auswählen. Nachdem der Benutzer mithilfe des Dialog Felds " Schriftart " eine Schriftart ausgewählt und die Schaltfläche " OK " gedrückt hat, initialisiert die Funktion " choosetfont " die Member einer LOGFONT -Struktur mit den Attributen der angeforderten Schriftart. Um diese Schriftart für Textausgabe Vorgänge zu verwenden, muss eine Anwendung zunächst eine logische Schriftart erstellen und diese dann in Ihrem Gerätekontext auswählen. Eine logische Schriftart ist eine von der Anwendung bereitgestellte Beschreibung einer idealen Schriftart. Ein Entwickler kann eine logische Schriftart durch Aufrufen der createFont -oder createfontindirekte -Funktionen erstellen. In diesem Fall ruft die Anwendung " kreatefontindirekte " auf und gibt einen Zeiger auf die LOGFONT -Struktur an, die durch " choosefont" initialisiert wird. Im Allgemeinen ist es effizienter, " kreatefontindirekte " aufzurufen, da " kreatefont " mehrere Parameter erfordert, während " kreatefontindirekte " 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 Entsprechung aus den intern auf dem Gerät gespeicherten Schriftarten und die Schriftarten ermitteln, 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 mit einer angegebenen logischen Schriftart am ehesten übereinstimmt, wird als Schriftart Zuordnung bezeichnet. Dieser Prozess tritt auf, wenn eine Anwendung die SelectObject -Funktion aufruft und ein Handle bereitstellt, das eine logische Schriftart identifiziert. Die Schriftart Zuordnung erfolgt mithilfe eines internen Algorithmus, der die Attribute der angeforderten logischen Schriftart mit den Attributen verfügbarer physischer Schriftarten vergleicht. Wenn der Schriftart Mapper-Algorithmus die Suche abschließt und die nächstmögliche Entsprechung festlegt, 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 Schriftart Mapper-Algorithmus nur nach physischen Schriftarten sucht, deren Seitenverhältnisse 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 Schriftart des Systems (auch als Shell oder Standard Schriftart bezeichnet) ist die Schriftart, die für Text in den Titelleisten, Menüs und Dialogfeldern verwendet wird.

Besondere Überlegungen zur Schriftart Auswahl

Obwohl der Benutzer die meisten Schriftart Auswahl Vorgänge einschließt, gibt es einige Instanzen, in denen dies nicht zutrifft. Beispielsweise kann ein Entwickler eine eindeutige Schriftart in einer Anwendung verwenden, um Text in einem Steuerelement Fenster zu zeichnen. Um eine geeignete Schriftart auszuwählen, muss die Anwendung in der Lage sein, zu bestimmen, welche Schriftarten verfügbar sind, erstellt eine logische Schriftart, die eine dieser verfügbaren Schriftarten beschreibt, und wählt diese Schriftart dann in den entsprechenden Gerätekontext aus.

Eine Anwendung kann die verfügbaren Schriftarten mithilfe der Funktionen enumfonts oder EnumFontFamilies auflisten. EnumFontFamilies wird empfohlen, da Sie alle Stile auflistet, die einem Familiennamen zugeordnet sind. Dies kann für Schriftarten mit vielen oder ungewöhnlichen Formaten und für Schriftarten nützlich sein, die internationale Grenzen überschreiten.

Nachdem eine Anwendung die verfügbaren Schriftarten aufgezählt und eine passende Entsprechung gefunden hat, sollte Sie die von der Schriftart Enumerationsfunktion zurückgegebenen Werte verwenden, um die Member einer LOGFONT -Struktur zu initialisieren. Anschließend kann die Funktion die Funktion "Funktion" von "Funktion" aufrufen und ihr einen Zeiger auf die initialisierte LOGFONT -Struktur übergeben. Wenn die createfontindirekte -Funktion erfolgreich ist, kann die Anwendung die logische Schriftart durch Aufrufen der SelectObject -Funktion auswählen. Wenn Sie die Member der LOGFONT -Struktur initialisieren, achten Sie darauf, einen bestimmten Zeichensatz im lfCharSet -Member anzugeben. Dieser Member ist im Schriftart Zuordnungs Prozess wichtig, und die Ergebnisse sind inkonsistent, wenn dieser Member nicht ordnungsgemäß initialisiert wird. Wenn Sie im lffacename -Member der LOGFONT -Struktur einen Schriftart Namen angeben, stellen Sie sicher, dass der lfCharSet -Wert mit dem Zeichensatz der in lffacename angegebenen Schriftart übereinstimmt. Wenn Sie z. b. eine Schriftart (z. b. 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 Schriftart Namen: einen englischen Namen und einen lokalisierten Namen. " Kreatefont", " kreatefontindirekte" und " kreatefontderetex " verwenden den lokalisierten Namen für ein System Gebiets Schema, das der Sprache entspricht Die beste Methode besteht darin, einen Namen auszuprobieren und bei einem Fehler die andere zu testen. Beachten Sie, dass enumfonts, EnumFontFamiliesund enumfontfamiliesex den englischen Schriftart Namen zurückgeben, wenn das Gebiets Schema des Systems nicht mit der Sprache der Schriftart identisch ist. Ab Windows 2000 ist dies kein Problem mehr, da der Schriftart-Mapper für " kreatefont", " kreatefontindirekte" und " kreatefontderetex " einen der beiden Schriftart Namen erkennt, unabhängig vom Gebiets Schema.