CreateFontW-Funktion (wingdi.h)
Die CreateFont-Funktion erstellt eine logische Schriftart mit den angegebenen Merkmalen. Anschließend kann die logische Schriftart 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 der Zeichenzelle oder des Zeichens der Schriftart in logischen Einheiten. Der Wert für die Zeichenhöhe (auch als em height bezeichnet) ist der Wert der Zeichenzellenhöhe abzüglich des inneren führenden Werts. Die Schriftartenzuordnung interpretiert den in nHeight angegebenen Wert wie folgt.
Wert | Bedeutung |
---|---|
|
Die Schriftartenzuordnung transformiert diesen Wert in Geräteeinheiten und gleicht ihn mit der Zellhöhe der verfügbaren Schriftarten ab. |
|
Die Schriftartenzuordnung verwendet einen Standardhöhenwert, wenn nach einer Übereinstimmung gesucht wird. |
|
Die Schriftartenzuordnung transformiert diesen Wert in Geräteeinheiten und gleicht seinen absoluten Wert mit der Zeichenhöhe der verfügbaren Schriftarten ab. |
Bei allen Höhenvergleichen sucht der Schriftartenzuordnungser 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 der Zeichen in der angeforderten Schriftart in logischen Einheiten. Wenn dieser Wert 0 ist, wählt die Schriftartzuordnung einen Wert aus, der am nächsten ist. Der nächstgelegene Übereinstimmungswert wird bestimmt, indem die absoluten Werte der Differenz 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 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 den gleichen 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 null ist, wird eine Standardgewichtung verwendet.
Die folgenden Werte werden aus Gründen der Einfachheit 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 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
- JOHAB_CHARSET
- ARABIC_CHARSET
- HEBREW_CHARSET
- THAI_CHARSET
DEFAULT_CHARSET wird basierend auf dem aktuellen Systemgebietsschema auf einen Wert festgelegt. 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 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.
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.
[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.
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
Eine Anwendung kann einen Wert für den fdwPitchAndFamily-Parameter angeben, indem sie den booleschen OR-Operator verwendet, um eine Tonhöhenkonstante mit einer Familienkonstante zu verbinden.
Schriftfamilien beschreiben das Aussehen einer Schriftart allgemein. Sie dienen zum Angeben von Schriftarten, wenn die angeforderte Schriftart nicht genau verfügbar ist.
[in] pszFaceName
Ein Zeiger auf eine NULL-endende Zeichenfolge, die den Schriftartnamen der Schriftart angibt. Die Länge dieser Zeichenfolge darf 32 Zeichen nicht überschreiten, einschließlich des abschließenden 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 der Schriftartenzuordnungser eine Schriftart mit ähnlichen Attributen, aber einem anderen Namen. 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 mithilfe von CreateFont oder CreateFontIndirect.
Die Schriftartenzuordnung für CreateFont, CreateFontIndirect und CreateFontIndirectEx erkennt sowohl den englischen als auch den lokalisierten Schriftartnamen, unabhängig vom Gebietsschema.
In den folgenden Situationen wird das ClearType-Antialiasing nicht unterstützt:
- Auf einem Drucker gerenderter Text.
- Eine Anzeige, die für maximal 256 Farben festgelegt ist.
- Text, der auf einem Terminalserverclient gerendert wird.
- Die Schriftart ist keine TrueType-Schriftart oder OpenType-Schriftart mit TrueType-Konturen. Beispielsweise unterstützen die folgenden ClearType-Antialiasing nicht: Type 1-Schriftarten, Postscript-OpenType-Schriftarten ohne TrueType-Gliederungen, Bitmapschriftarten, Vektorschriftarten und Geräteschriftarten.
- Die Schriftart verfügt nur für die Schriftgrößen, die die eingebetteten Bitmaps enthalten, über optimierte eingebettete Bitmaps. 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 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
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 (windows.h einschließen) |
Bibliothek | Gdi32.lib |
DLL | Gdi32.dll |
Weitere Informationen
EnumFontFamilies
Schriftart- und Textfunktionen