CreateFontW-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 CreateFontW(
[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] LPCWSTR pszFaceName
);
Parameter
[in] cHeight
Die Höhe in logischen Einheiten der Zeichenzelle oder des Zeichens der Schriftart. Der Zeichenhöhenwert (auch als Em-Höhe bezeichnet) ist der Wert der Zeichenzellenhöhe minus dem internen vorangestellten Wert. Die Schriftartzuordnung interpretiert den in nHeight- angegebenen Wert wie folgt.
Wert | Bedeutung |
---|---|
|
Der Schriftart-Mapper wandelt diesen Wert in Geräteeinheiten um und stimmt mit der Zellenhöhe der verfügbaren Schriftarten überein. |
|
Der Schriftartzuordnungswert verwendet einen Standardhöhenwert, wenn er nach einer Übereinstimmung sucht. |
|
Der Schriftart-Mapper wandelt diesen Wert in Geräteeinheiten um und gleicht seinen absoluten Wert mit der Zeichenhöhe der verfügbaren Schriftarten ab. |
Bei allen Höhenvergleichen sucht der Schriftzuordnungs-Mapper nach der größten Schriftart, die die angeforderte Größe nicht überschreitet.
Diese Zuordnung tritt auf, 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 in logischen Einheiten von Zeichen in der angeforderten Schriftart. Wenn dieser Wert null ist, wählt der Schriftartzuordnungswert einen nächstgelegenen Übereinstimmungswert aus. Der nächste Übereinstimmungswert wird bestimmt, indem die absoluten Werte des Unterschieds zwischen dem Seitenverhältnis des aktuellen Geräts und dem digitalisierten Seitenverhältnis der verfügbaren Schriftarten verglichen werden.
[in] cEscapement
Der Winkel in Zehntel grad zwischen dem Escapementvektor und der X-Achse des Geräts. Der Escapezeichenvektor ist parallel zur Basiszeile einer Textzeile.
Wenn der Grafikmodus auf GM_ADVANCED festgelegt ist, können Sie den Escapewinkel der Zeichenfolge unabhängig vom Ausrichtungswinkel der Zeichenfolgenzeichen 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 zwischen der Basislinie jedes Zeichens und der X-Achse des Geräts in zehntel Grad.
[in] cWeight
Die Stärke der Schriftart im Bereich 0 bis 1000. Beispielsweise ist 400 normal und 700 fett formatiert. Wenn dieser Wert null ist, wird eine Standardgewichtung verwendet.
Die folgenden Werte werden zur Vereinfachung definiert.
[in] bItalic
Gibt eine kursiv formatierte Schriftart an, wenn sie auf TRUE-festgelegt ist.
[in] bUnderline
Gibt eine unterstrichene Schriftart an, wenn sie auf TRUE-festgelegt ist.
[in] bStrikeOut
Eine durchgestrichene Schriftart, wenn sie auf TRUE-festgelegt ist.
[in] iCharSet
Der Zeichensatz. Die folgenden Werte sind vordefinierte:
- 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
- JOHAB_CHARSET
- ARABIC_CHARSET
- HEBREW_CHARSET
- THAI_CHARSET
DEFAULT_CHARSET wird auf einen Wert festgelegt, der auf dem aktuellen Systemgebietsschema basiert. Wenn das Systemgebietsschema beispielsweise Englisch (USA) ist, wird es als 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 nicht versucht werden, Zeichenfolgen zu übersetzen oder zu interpretieren, die mit dieser Schriftart gerendert werden.
Wenn Sie beim Erstellen einer Schriftart konsistente Ergebnisse sicherstellen möchten, geben Sie nicht OEM_CHARSET oder DEFAULT_CHARSET an. Wenn Sie im parameter lpszFace einen Schriftartnamen angeben, stellen Sie sicher, dass der fdwCharSet-wert dem Zeichensatz der in lpszFaceangegebenen Schriftart entspricht.
[in] iOutPrecision
Die Ausgabegenauigkeit. Die Ausgabegenauigkeit definiert, wie genau die Ausgabe mit der Höhe, Breite, Zeichenausrichtung, Escapezeichen, Pitch und Schriftarttyp der angeforderten Schriftart übereinstimmen muss. Dabei kann es sich um einen der folgenden Werte handeln.
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 Schriftartzuordnung eine Schriftart auswährt, wenn das Betriebssystem mehrere Schriftarten mit einem angegebenen Namen enthält. Wenn z. B. ein Betriebssystem eine Schriftart mit dem Namen "Symbol" im Raster- und TrueType-Format enthält, erzwingt die Angabe OUT_TT_PRECIS erzwingt die Schriftartzuordnung, die TrueType-Version auszuwählen. Wenn Sie OUT_TT_ONLY_PRECIS angeben, wird die Schriftartzuordnung gezwungen, eine TrueType-Schriftart auszuwählen, auch wenn sie eine TrueType-Schriftart eines anderen Namens ersetzen muss.
[in] iClipPrecision
Die Beschneidungsgenauigkeit. Die Beschneidungsgenauigkeit definiert, wie Zeichen abgeschnitten werden, die sich teilweise außerhalb des Beschneidungsbereichs befinden. Dabei kann es sich um einen oder mehrere der folgenden Werte handeln.
[in] iQuality
Die Ausgabequalität. Die Ausgabequalität definiert, wie sorgfältig GDI versuchen muss, die Attribute der logischen Schriftart mit denen einer tatsächlichen physischen Schriftart abzugleichen. Dabei kann es sich um einen der folgenden Werte handeln.
Wenn die Ausgabequalität DEFAULT_QUALITY, DRAFT_QUALITY oder PROOF_QUALITY ist, wird die Schriftart antialiasiert, wenn der SPI_GETFONTSMOOTHING Systemparameter TRUEist. Benutzer können diesen Systemparameter über die Systemsteuerung steuern. (Der genaue Wortlaut der Einstellung in der Systemsteuerung hängt von der Windows-Version ab, aber es sind Wörter für die Wirkung von "Glatte Ränder von Bildschirmschriftarten".)
[in] iPitchAndFamily
Der Pitch und die Familie der Schriftart. Die beiden Bits mit niedriger Reihenfolge geben den Schriftgrad an und können einen der folgenden Werte aufweisen:
- DEFAULT_PITCH
- FIXED_PITCH
- VARIABLE_PITCH
Eine Anwendung kann einen Wert für den fdwPitchAndFamily Parameter angeben, indem der boolesche ODER-Operator verwendet wird, um eine Neigungskonstante mit einer Familienkonstante zu verbinden.
Schriftfamilien beschreiben das Aussehen einer Schriftart auf allgemeine Weise. Sie sind für die Angabe von Schriftarten vorgesehen, wenn die angeforderte Schriftart nicht verfügbar ist.
[in] pszFaceName
Ein Zeiger auf eine mit Null beendete Zeichenfolge, die den Schriftartnamen angibt. Die Länge dieser Zeichenfolge darf 32 Zeichen, einschließlich des endenden NULL-Zeichens, nicht überschreiten. Die funktion EnumFontFamilies kann verwendet werden, um die Schriftartnamen aller aktuell verfügbaren Schriftarten aufzulisten. Weitere Informationen finden Sie in den Anmerkungen.
Wenn pszFaceNameNULL- 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 die Funktion fehlschlägt, ist der Rückgabewert NULL-.
Bemerkungen
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 z. B. eine Schriftart mit dem Namen Palatino anfordern, aber keine solche Schriftart auf dem System verfügbar ist, ersetzt der Schriftart-Mapper eine Schriftart mit ähnlichen Attributen, aber einen anderen Namen. Melden Sie immer den Namen der ausgewählten Schriftart an den Benutzer.
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,CreateFontIndirectund CreateFontIndirectEx erkennt sowohl den englischen als auch den lokalisierten Schriftartnamen, unabhängig vom Gebietsschema.
In den folgenden Situationen wird clearType-Antialiasing nicht unterstützt:
- Text, der auf einem Drucker gerendert wird.
- Ein Anzeigesatz für 256 Farben oder weniger.
- Text, der auf einem Terminalserverclient gerendert wird.
- Die Schriftart ist keine TrueType-Schriftart oder eine OpenType-Schriftart mit TrueType-Gliederungen. Beispielsweise wird die ClearType-Antialiasing nicht unterstützt: Typ 1 Schriftarten, Postscript OpenType-Schriftarten ohne TrueType-Gliederungen, Bitmapschriftarten, Vektorschriftarten und Geräteschriftarten.
- Die Schriftart hat eingebettete Bitmaps optimiert, nur für die Schriftgrade, 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" in Verwenden von Menüs.
Anmerkung
Der wingdi.h-Header definiert CreateFont als Alias, der automatisch die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit Code, der nicht codierungsneutral ist, 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 |
---|---|
mindestens unterstützte Client- | Windows 2000 Professional [nur Desktop-Apps] |
mindestens unterstützte Server- | Windows 2000 Server [nur Desktop-Apps] |
Zielplattform- | Fenster |
Header- | wingdi.h (enthalten Windows.h) |
Library | Gdi32.lib |
DLL- | Gdi32.dll |
Siehe auch
EnumFontFamilies
Schriftart- und Textfunktionen