CreateFontA-Funktion (wingdi.h)

Die CreateFont-Funktion erstellt eine logische Schriftart mit den angegebenen Merkmalen. Die logische Schriftart kann anschließend als Schriftart für jedes Gerät ausgewählt werden.

Syntax

HFONT CreateFontA(
  [in] int    cHeight,
  [in] int    cWidth,
  [in] int    cEscapement,
  [in] int    cOrientation,
  [in] int    cWeight,
  [in] DWORD  bItalic,
  [in] DWORD  bUnderline,
  [in] DWORD  bStrikeOut,
  [in] DWORD  iCharSet,
  [in] DWORD  iOutPrecision,
  [in] DWORD  iClipPrecision,
  [in] DWORD  iQuality,
  [in] DWORD  iPitchAndFamily,
  [in] LPCSTR pszFaceName
);

Parameter

[in] cHeight

Die Höhe der Zeichenzelle oder des Zeichens der Schriftart in logischen Einheiten. Der Zeichenhöhenwert (auch als em height bezeichnet) ist der Wert der Zeichenzellenhöhe abzüglich des inneren Leitwerts. Die Schriftartzuordnung interpretiert den in nHeight angegebenen Wert wie folgt.

Wert Bedeutung
> 0
Die Schriftartzuordnung transformiert diesen Wert in Geräteeinheiten und gleicht ihn mit der Zellhöhe der verfügbaren Schriftarten ab.
0
Der Schriftartzuordnungsmodul verwendet einen Standardwert für die Höhe, wenn er nach einer Übereinstimmung sucht.
< 0
Die Schriftartzuordnung transformiert diesen Wert in Geräteeinheiten und gleicht seinen absoluten Wert mit der Zeichenhöhe der verfügbaren Schriftarten ab.
 

Für alle Höhenvergleiche sucht der Schriftartzuordnungs-Benutzer nach der größten Schriftart, die die angeforderte Größe nicht überschreitet.

Diese Zuordnung erfolgt, wenn die Schriftart zum ersten Mal verwendet wird.

Für den MM_TEXT Zuordnungsmodus können Sie die folgende Formel verwenden, um eine Höhe für eine Schriftart mit einer angegebenen Punktgröße anzugeben:


nHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);

[in] cWidth

Die durchschnittliche Breite von Zeichen in logischen Einheiten in der angeforderten Schriftart. Wenn dieser Wert 0 ist, wählt der Schriftartzuordnungsgeber einen Wert für die nächstgelegene Übereinstimmung aus. Der nächstgelegene Übereinstimmungswert wird ermittelt, indem die absoluten Werte der Differenz zwischen dem Seitenverhältnis des aktuellen Geräts und dem digitalisierten Seitenverhältnis verfügbarer Schriftarten verglichen werden.

[in] cEscapement

Der Winkel in zehntel Grad zwischen dem Henisierungsvektor und der x-Achse des Geräts. Der Escapementvektor ist parallel zur Basiszeile einer Textzeile.

Wenn der Grafikmodus auf GM_ADVANCED festgelegt ist, können Sie den Escapementwinkel der Zeichenfolge unabhängig vom Ausrichtungswinkel der Zeichen der Zeichenfolge angeben.

Wenn der Grafikmodus auf GM_COMPATIBLE festgelegt ist, gibt nEscapement sowohl die Escape als auch die Ausrichtung an. Sie sollten nEscapement und nOrientation auf denselben Wert festlegen.

[in] cOrientation

Der Winkel in zehntel Grad zwischen der Basislinie jedes Zeichens und der x-Achse des Geräts.

[in] cWeight

Die Gewichtung der Schriftart im Bereich von 0 bis 1000. Beispielsweise ist 400 normal und 700 fett. Wenn dieser Wert 0 ist, wird eine Standardgewichtung verwendet.

Die folgenden Werte werden aus Gründen der Benutzerfreundlichkeit definiert.

Weight Wert
FW_DONTCARE
0
FW_THIN
100
FW_EXTRALIGHT
200
FW_ULTRALIGHT
200
FW_LIGHT
300
FW_NORMAL
400
FW_REGULAR
400
FW_MEDIUM
500
FW_SEMIBOLD
600
FW_DEMIBOLD
600
FW_BOLD
700
FW_EXTRABOLD
800
FW_ULTRABOLD
800
FW_HEAVY
900
FW_BLACK
900

[in] bItalic

Gibt eine kursiv geschriebene Schriftart an, wenn sie auf TRUE festgelegt ist.

[in] bUnderline

Gibt eine unterstrichene Schriftart an, wenn sie auf TRUE festgelegt ist.

[in] bStrikeOut

Eine Streichschriftart, wenn sie auf TRUE festgelegt ist.

[in] iCharSet

Der Zeichensatz. Die folgenden Werte sind vordefiniert:

  • ANSI_CHARSET
  • BALTIC_CHARSET
  • CHINESEBIG5_CHARSET
  • DEFAULT_CHARSET
  • EASTEUROPE_CHARSET
  • GB2312_CHARSET
  • GREEK_CHARSET
  • HANGUL_CHARSET
  • MAC_CHARSET
  • OEM_CHARSET
  • RUSSIAN_CHARSET
  • SHIFTJIS_CHARSET
  • SYMBOL_CHARSET
  • TURKISH_CHARSET
  • VIETNAMESE_CHARSET
Koreanische Sprachausgabe von Windows:
  • JOHAB_CHARSET
Sprachausgabe "Naher Osten" von Windows:
  • ARABIC_CHARSET
  • HEBREW_CHARSET
Thai-Sprachausgabe von Windows:
  • THAI_CHARSET
Der wert OEM_CHARSET gibt einen vom Betriebssystem abhängigen Zeichensatz an.

DEFAULT_CHARSET wird basierend auf dem aktuellen Systemgebietsschema auf einen Wert festgelegt. Wenn das Systemgebietsschema beispielsweise englisch (USA) ist, wird es auf ANSI_CHARSET festgelegt.

Schriftarten mit anderen Zeichensätzen können im Betriebssystem vorhanden sein. Wenn eine Anwendung eine Schriftart mit einem unbekannten Zeichensatz verwendet, sollte sie nicht versuchen, Zeichenfolgen zu übersetzen oder zu interpretieren, die mit dieser Schriftart gerendert werden.

Geben Sie beim Erstellen einer Schriftart keine OEM_CHARSET oder DEFAULT_CHARSET an, um konsistente Ergebnisse zu gewährleisten. Wenn Sie einen Schriftartnamen im lpszFace-Parameter angeben, stellen Sie sicher, dass der fdwCharSet-Wert mit dem Zeichensatz der in lpszFace angegebenen Schriftart übereinstimmt.

[in] iOutPrecision

Die Ausgabegenauigkeit. Die Ausgabegenauigkeit definiert, wie eng die Ausgabe der Höhe, Breite, Zeichenausrichtung, Escapement, Tonhöhe und Schrifttyp der angeforderten Schriftart entsprechen muss. Dieses Argument einen der folgenden Werte annehmen.

Wert Bedeutung
OUT_CHARACTER_PRECIS
Wird nicht verwendet.
OUT_DEFAULT_PRECIS
Das Standardverhalten der Schriftartenzuordnung.
OUT_DEVICE_PRECIS
Weist den Schriftartenzuordnungser an, eine Geräteschriftart auszuwählen, wenn das System mehrere Schriftarten mit demselben Namen enthält.
OUT_OUTLINE_PRECIS
Dieser Wert weist die Schriftartenzuordnung an, aus TrueType und anderen gliederungsbasierten Schriftarten auszuwählen.
OUT_PS_ONLY_PRECIS
Weist die Schriftartenzuordnung an, nur aus PostScript-Schriftarten auszuwählen. Wenn keine PostScript-Schriftarten im System installiert sind, kehrt die Schriftartzuordnung zum Standardverhalten zurück.
OUT_RASTER_PRECIS
Weist den Schriftartenzuordnungser an, eine Rasterschriftart auszuwählen, wenn das System mehrere Schriftarten mit demselben Namen enthält.
OUT_STRING_PRECIS
Dieser Wert wird nicht vom Schriftartenzuordnungs-Element verwendet, aber er wird zurückgegeben, wenn Rasterschriftarten aufgezählt werden.
OUT_STROKE_PRECIS
Dieser Wert wird nicht vom Schriftartenzuordnungs-Objekt verwendet, aber er wird zurückgegeben, wenn TrueType, andere gliederungsbasierte Schriftarten und Vektorschriftarten aufgezählt werden.
OUT_TT_ONLY_PRECIS
Weist die Schriftartenzuordnung an, nur trueType-Schriftarten auszuwählen. Wenn keine TrueType-Schriftarten im System installiert sind, kehrt die Schriftartenzuordnung zum Standardverhalten zurück.
OUT_TT_PRECIS
Weist den Schriftartenzuordnungser an, eine TrueType-Schriftart auszuwählen, wenn das System mehrere Schriftarten mit demselben Namen enthält.
 

Anwendungen können die Werte OUT_DEVICE_PRECIS, OUT_RASTER_PRECIS, OUT_TT_PRECIS und OUT_PS_ONLY_PRECIS verwenden, um zu steuern, wie die Schriftartenzuordnung eine Schriftart auswährt, wenn das Betriebssystem mehrere Schriftarten mit einem angegebenen Namen enthält. Wenn beispielsweise ein Betriebssystem eine Schriftart mit dem Namen Symbol im Raster- und TrueType-Formular enthält, erzwingt die Angabe von OUT_TT_PRECIS, dass die Schriftartzuordnung die TrueType-Version auswäht. Die Angabe OUT_TT_ONLY_PRECIS erzwingt, dass der Schriftartenzuordnungser eine TrueType-Schriftart auswählen muss, auch wenn er eine TrueType-Schriftart mit einem anderen Namen ersetzen muss.

[in] iClipPrecision

Die Clippinggenauigkeit. Die Beschneidungsgenauigkeit definiert, wie Zeichen beschnitten werden, die teilweise außerhalb des Beschneidungsbereichs liegen. Er kann einen der folgenden Werte annehmen.

Wert Bedeutung
CLIP_CHARACTER_PRECIS
Wird nicht verwendet.
CLIP_DEFAULT_PRECIS
Gibt das Standard-Clippingverhalten an.
CLIP_DFA_DISABLE
Windows XP SP1: Deaktiviert die Schriftartenzuordnung für die Schriftart. Beachten Sie, dass dieses Flag nach Windows Server 2003 keine Auswirkungen auf eine Plattform hat.
CLIP_EMBEDDED
Sie müssen dieses Flag angeben, um eine eingebettete schreibgeschützte Schriftart zu verwenden.
CLIP_LH_ANGLES
Wenn dieser Wert verwendet wird, hängt die Drehung für alle Schriftarten davon ab, ob die Ausrichtung des Koordinatensystems links- oder rechtshändig ist.

Wenn sie nicht verwendet werden, drehen Geräteschriftarten immer gegen den Uhrzeigersinn, aber die Drehung anderer Schriftarten hängt von der Ausrichtung des Koordinatensystems ab.

Weitere Informationen zur Ausrichtung von Koordinatensystemen finden Sie in der Beschreibung des nOrientation-Parameters .

CLIP_MASK
Wird nicht verwendet.
CLIP_DFA_OVERRIDE
Deaktiviert die Schriftartenzuordnung für die Schriftart. Dies ist identisch mit CLIP_DFA_DISABLE, kann aber in einigen Situationen Probleme haben. Das empfohlene Flag ist CLIP_DFA_DISABLE.
CLIP_STROKE_PRECIS
Wird nicht vom Schriftartenzuordnungs-Objekt verwendet, wird aber zurückgegeben, wenn Raster-, Vektor- oder TrueType-Schriftarten aufgezählt werden.

Aus Kompatibilitätsgründen wird dieser Wert beim Aufzählen von Schriftarten immer zurückgegeben.

CLIP_TT_ALWAYS
Wird nicht verwendet.

[in] iQuality

Die Ausgabequalität. Die Ausgabequalität definiert, wie sorgfältig GDI versuchen muss, die Attribute für logische Schriftarten mit denen einer tatsächlichen physischen Schriftart abzugleichen. Dieses Argument einen der folgenden Werte annehmen.

Wert Bedeutung
ANTIALIASED_QUALITY
Die Schriftart wird antialiasiert oder geglättet, wenn die Schriftart sie unterstützt und die Schriftgröße nicht zu klein oder zu groß ist.
CLEARTYPE_QUALITY
Wenn festgelegt, wird Text (wenn möglich) mit der ClearType-Antialiasingmethode gerendert. Weitere Informationen finden Sie unter Hinweise.
DEFAULT_QUALITY
Die Darstellung der Schriftart spielt keine Rolle.
DRAFT_QUALITY
Die Darstellung der Schriftart ist weniger wichtig als bei Verwendung des werts PROOF_QUALITY. Für GDI-Rasterschriftarten ist die Skalierung aktiviert. Dies bedeutet, dass mehr Schriftgrößen verfügbar sind, die Qualität jedoch möglicherweise niedriger ist. Fett-, Kursiv-, Unterstrichen- und Streichschriftarten werden bei Bedarf synthetisiert.
NONANTIALIASED_QUALITY
Die Schriftart wird nie antialiasiert, d. h. das Glätten von Schriftarten wird nicht durchgeführt.
PROOF_QUALITY
Die Zeichenqualität der Schriftart ist wichtiger als eine exakte Übereinstimmung der Attribute für logische Schriftarten. Bei GDI-Rasterschriftarten ist die Skalierung deaktiviert, und die Schrift wird ausgewählt, die der Größe am nächsten kommt. Obwohl der gewählte Schriftgrad möglicherweise nicht genau zugeordnet wird, wenn PROOF_QUALITY verwendet wird, ist die Qualität der Schriftart hoch und es gibt keine Verzerrung der Darstellung. Fett-, Kursiv-, Unterstrichen- und Streichschriftarten werden bei Bedarf synthetisiert.
 

Wenn die Ausgabequalität DEFAULT_QUALITY, DRAFT_QUALITY oder PROOF_QUALITY ist, wird die Schriftart antialiasiert, wenn der SPI_GETFONTSMOOTHING Systemparameter TRUE ist. Benutzer können diesen Systemparameter über die Systemsteuerung steuern. (Der genaue Wortlaut der Einstellung in der Systemsteuerung hängt von der Version von Windows ab, aber es wird wortet die Wirkung von "Glatte Kanten von Bildschirmschriftarten".)

[in] iPitchAndFamily

Die Tonhöhe und die Familie der Schriftart. Die beiden Bits mit niedriger Reihenfolge geben die Tonhöhe der Schriftart an und können einen der folgenden Werte aufweisen:

  • DEFAULT_PITCH
  • FIXED_PITCH
  • VARIABLE_PITCH
Die vier Bits mit hoher Reihenfolge geben die Schriftfamilie an und können einer der folgenden Werte sein.
Wert Bedeutung
FF_DECORATIVE
Schriftarten der Neuheit. Ein Beispiel ist Old English.
FF_DONTCARE
Verwenden Sie die Standardschriftart.
FF_MODERN
Schriftarten mit konstanter Strichbreite, mit oder ohne Serifen. Pica, Elite und Courier New sind Beispiele.
FF_ROMAN
Schriftarten mit variabler Strichbreite und mit Serifen. Ein Beispiel ist MS Serif.
FF_SCRIPT
Schriftarten, die wie Handschrift aussehen. Bespiele dafür sind Script und Cursive.
FF_SWISS
Schriftarten mit variabler Strichbreite und ohne Serifen. MS? Sans Serif ist ein Beispiel.
 

Eine Anwendung kann einen Wert für den parameter fdwPitchAndFamily angeben, indem sie den booleschen OR-Operator verwendet, um eine Tonhöhenkonstante mit einer Familienkonstante zu verknüpfen.

Schriftfamilien beschreiben das Aussehen einer Schriftart allgemein. Sie sind zum Angeben von Schriftarten vorgesehen, wenn die angeforderte genaue Schriftart nicht verfügbar ist.

[in] pszFaceName

Ein Zeiger auf eine NULL-Zeichenfolge, die den Schriftartnamen der Schriftart angibt. Die Länge dieser Zeichenfolge darf 32 Zeichen nicht überschreiten, einschließlich des endenden NULL-Zeichens. Die EnumFontFamilies-Funktion kann verwendet werden, um die Schriftartnamen aller derzeit verfügbaren Schriftarten aufzulisten. Weitere Informationen finden Sie in den Hinweisen.

Wenn lpszFaceNULL oder leere Zeichenfolge ist, verwendet GDI die erste Schriftart, die den anderen angegebenen Attributen entspricht.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ein Handle für eine logische Schriftart.

Wenn bei der Funktion ein Fehler auftritt, ist der Rückgabewert NULL.

Hinweise

Wenn Sie die Schriftart nicht mehr benötigen, rufen Sie die DeleteObject-Funktion auf, um sie zu löschen.

Um die Urheberrechte von Anbietern zu schützen, die Schriftarten für Windows bereitstellen, sollten Anwendungen immer den genauen Namen einer ausgewählten Schriftart melden. Da verfügbare Schriftarten von System zu System variieren können, gehen Sie nicht davon aus, dass die ausgewählte Schriftart immer mit der angeforderten Schriftart identisch ist. Wenn Sie beispielsweise eine Schriftart namens Palatino anfordern, aber keine solche Schriftart im System verfügbar ist, ersetzt die Schriftartzuordnung eine Schriftart, die ähnliche Attribute, aber einen anderen Namen aufweist. Melden Sie dem Benutzer immer den Namen der ausgewählten Schriftart.

Um die entsprechende Schriftart für verschiedene Sprachversionen des Betriebssystems zu erhalten, rufen Sie EnumFontFamiliesEx mit den gewünschten Schriftartmerkmalen in der LOGFONT-Struktur auf, rufen Sie dann den entsprechenden Schriftartnamen ab, und erstellen Sie die Schriftart mit CreateFont oder CreateFontIndirect.

Die Schriftartzuordnung für CreateFont, CreateFontIndirect und CreateFontIndirectEx erkennt unabhängig vom Gebietsschema sowohl den englischen als auch den lokalisierten Schriftnamen.

Die folgenden Situationen unterstützen das ClearType-Antialiasing nicht:

  • Text, der auf einem Drucker gerendert wird.
  • Eine Anzeige, die für weniger als 256 Farben festgelegt ist.
  • Text, der auf einem Terminalserverclient gerendert wird.
  • Die Schriftart ist keine TrueType-Schriftart oder eine OpenType-Schriftart mit TrueType-Gliederungen. Die folgenden Unterstützen beispielsweise die ClearType-Antialiasing nicht: Typ 1-Schriftarten, Postscript-OpenType-Schriftarten ohne TrueType-Gliederungen, Bitmapschriftarten, Vektorschriftarten und Geräteschriftarten.
  • Die Schriftart verfügt über angepasste eingebettete Bitmaps, nur für die Schriftgrößen, die die eingebetteten Bitmaps enthalten. Dies tritt beispielsweise häufig in ostasiatischen Schriftarten auf.

Beispiele

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    switch (message)
    {
    
    
    case WM_PAINT:
        {
        RECT rect;
        HFONT hFontOriginal, hFont1, hFont2, hFont3;
        hdc = BeginPaint(hWnd, &ps);

            
            //Logical units are device dependent pixels, so this will create a handle to a logical font that is 48 pixels in height.
            //The width, when set to 0, will cause the font mapper to choose the closest matching value.
            //The font face name will be Impact.
            hFont1 = CreateFont(48,0,0,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
                CLIP_DEFAULT_PRECIS,CLEARTYPE_QUALITY, VARIABLE_PITCH,TEXT("Impact"));
            hFontOriginal = (HFONT)SelectObject(hdc, hFont1);
            
            //Sets the coordinates for the rectangle in which the text is to be formatted.
            SetRect(&rect, 100,100,700,200);
            SetTextColor(hdc, RGB(255,0,0));
            DrawText(hdc, TEXT("Drawing Text with Impact"), -1,&rect, DT_NOCLIP);
            
            //Logical units are device dependent pixels, so this will create a handle to a logical font that is 36 pixels in height.
            //The width, when set to 20, will cause the font mapper to choose a font which, in this case, is stretched.
            //The font face name will be Times New Roman.  This time nEscapement is at -300 tenths of a degree (-30 degrees)
            hFont2 = CreateFont(36,20,-300,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
                CLIP_DEFAULT_PRECIS,CLEARTYPE_QUALITY, VARIABLE_PITCH,TEXT("Times New Roman"));
            SelectObject(hdc,hFont2);
            
            //Sets the coordinates for the rectangle in which the text is to be formatted.
            SetRect(&rect, 100, 200, 900, 800);
            SetTextColor(hdc, RGB(0,128,0));
            DrawText(hdc, TEXT("Drawing Text with Times New Roman"), -1,&rect, DT_NOCLIP);
                
            //Logical units are device dependent pixels, so this will create a handle to a logical font that is 36 pixels in height.
            //The width, when set to 10, will cause the font mapper to choose a font which, in this case, is compressed. 
            //The font face name will be Arial. This time nEscapement is at 250 tenths of a degree (25 degrees)
            hFont3 = CreateFont(36,10,250,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
                CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY, VARIABLE_PITCH,TEXT("Arial"));
            SelectObject(hdc,hFont3);

            //Sets the coordinates for the rectangle in which the text is to be formatted.
            SetRect(&rect, 500, 200, 1400, 600);
            SetTextColor(hdc, RGB(0,0,255));
            DrawText(hdc, TEXT("Drawing Text with Arial"), -1,&rect, DT_NOCLIP);

            SelectObject(hdc,hFontOriginal);
            DeleteObject(hFont1);
            DeleteObject(hFont2);
            DeleteObject(hFont3);
        
        EndPaint(hWnd, &ps);
        break;
        }
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

Ein weiteres Beispiel finden Sie unter Festlegen von Schriftarten für Menu-Item Textzeichenfolgen unter Verwenden von Menüs.

Hinweis

Der wingdi.h-Header definiert CreateFont als Alias, der die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante automatisch auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit nicht codierungsneutralem Code kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile wingdi.h (einschließlich Windows.h)
Bibliothek Gdi32.lib
DLL Gdi32.dll

Weitere Informationen

CreateFontIndirect

CreateFontIndirectEx

DeleteObject

EnumFontFamilies

EnumFontFamiliesEx

EnumFonts

Schriftart- und Textfunktionen

Übersicht über Schriftarten und Text

LOGFONT

Auswählenobjekt