CFont
-Klasse
Kapselt eine Schriftart der Windows GDI (Graphics Device Interface) und stellt Memberfunktionen zum Bearbeiten der Schriftart bereit.
Syntax
class CFont : public CGdiObject
Member
Öffentliche Konstruktoren
Name | Beschreibung |
---|---|
CFont::CFont |
Erstellt ein CFont -Objekt. |
Öffentliche Methoden
Name | Beschreibung |
---|---|
CFont::CreateFont |
Initialisiert eine CFont mit den angegebenen Merkmalen. |
CFont::CreateFontIndirect |
Initialisiert ein CFont Objekt mit den in einer LOGFONT Struktur angegebenen Merkmalen. |
CFont::CreatePointFont |
Initialisiert eine CFont mit der angegebenen Höhe, gemessen in Zehnteln eines Punkts und Schriftart. |
CFont::CreatePointFontIndirect |
Identisch mit CreateFontIndirect der Ausnahme, dass die Schrifthöhe in Zehnteln eines Punkts und nicht in logischen Einheiten gemessen wird. |
CFont::FromHandle |
Gibt einen Zeiger auf ein CFont Objekt zurück, wenn ein Windows HFONT -Objekt angegeben ist. |
CFont::GetLogFont |
Füllt eine LOGFONT Füllung mit Informationen zur logischen Schriftart, die dem CFont Objekt zugeordnet ist. |
Öffentliche Operatoren
Name | Beschreibung |
---|---|
CFont::operator HFONT |
Gibt das dem Objekt angefügte Windows GDI-Schriftarthandle zurück CFont . |
Hinweise
Um ein CFont
Objekt zu verwenden, erstellen Sie ein CFont
Objekt, und fügen Sie eine Windows-Schriftart mit CreateFont
, CreateFontIndirect
, CreatePointFont
, oder , und CreatePointFontIndirect
verwenden Sie dann die Memberfunktionen des Objekts, um die Schriftart zu bearbeiten.
Die CreatePointFont
Funktionen und CreatePointFontIndirect
Funktionen sind häufig einfacher zu verwenden als CreateFont
oder CreateFontIndirect
da sie die Konvertierung für die Höhe der Schriftart von einer Punktgröße in logische Einheiten automatisch durchführen.
Weitere Informationen CFont
finden Sie unter Graphic Objects.
Vererbungshierarchie
CFont
Anforderungen
Header: afxwin.h
CFont::CFont
Erstellt ein CFont
-Objekt.
CFont();
Hinweise
Das resultierende Objekt muss mit CreateFont
, CreateFontIndirect
, , CreatePointFont
oder CreatePointFontIndirect
bevor es verwendet werden kann initialisiert werden.
Beispiel
CFont font;
CFont::CreateFont
Initialisiert ein CFont
Objekt mit den angegebenen Merkmalen.
BOOL CreateFont(
int nHeight,
int nWidth,
int nEscapement,
int nOrientation,
int nWeight,
BYTE bItalic,
BYTE bUnderline,
BYTE cStrikeOut,
BYTE nCharSet,
BYTE nOutPrecision,
BYTE nClipPrecision,
BYTE nQuality,
BYTE nPitchAndFamily,
LPCTSTR lpszFacename);
Parameter
nHeight
Gibt die gewünschte Höhe (in logischen Einheiten) der Schriftart an. Eine Beschreibung finden Sie im lfHeight
Element der LOGFONT
Struktur im Windows SDK. Der absolute Wert darf nHeight
nach der Konvertierung nicht mehr als 16.384 Geräteeinheiten betragen. Bei allen Höhenvergleichen sucht der Schriftzuordnungs-Mapper nach der größten Schriftart, die den angeforderten Schriftgrad oder die kleinste Schriftart nicht überschreitet, wenn alle Schriftarten den angeforderten Schriftgrad überschreiten.
nWidth
Gibt die durchschnittliche Breite (in logischen Einheiten) von Zeichen in der Schriftart an. Wenn nWidth
0 ist, wird das Seitenverhältnis des Geräts mit dem Digitalisierungs-Seitenverhältnis der verfügbaren Schriftarten abgeglichen, um die nächstgelegene Übereinstimmung zu finden, die durch den absoluten Wert der Differenz bestimmt wird.
nEscapement
Gibt den Winkel (in 0,1-Grad-Einheiten) zwischen dem Escapementvektor und der X-Achse der Anzeigeoberfläche an. Der Escapezeichenvektor ist die Linie durch die Ursprünge der ersten und letzten Zeichen in einer Zeile. Der Winkel wird gegen den Uhrzeigersinn von der X-Achse gemessen. Weitere Informationen finden Sie im lfEscapement
Member in der LOGFONT
Struktur im Windows SDK.
nOrientation
Gibt den Winkel (in 0,1-Grad-Einheiten) zwischen dem Basisplan eines Zeichens und der X-Achse an. Der Winkel wird gegen den Uhrzeigersinn von der X-Achse für Koordinatensysteme gemessen, in denen die Y-Richtung nach unten und im Uhrzeigersinn von der X-Achse für Koordinatensysteme, in denen die Y-Richtung nach oben ist.
nWeight
Gibt die Schriftbreite (in Freihandpixeln pro 1000) an. Weitere Informationen finden Sie im lfWeight
Member in der LOGFONT
Struktur im Windows SDK. Die beschriebenen Werte sind ungefähr; die tatsächliche Darstellung hängt von der Schriftart ab. Einige Schriftarten verfügen nur FW_NORMAL
über , FW_REGULAR
und FW_BOLD
gewichtet. Wenn FW_DONTCARE
angegeben, wird eine Standardgewichtung verwendet.
bItalic
Gibt an, ob die Schriftart kursiv formatiert ist.
bUnderline
Gibt an, ob die Schriftart unterstrichen ist.
cStrikeOut
Gibt an, ob Zeichen in der Schriftart ausgestrichen sind. Gibt eine durchgestrichene Schriftart an, wenn sie auf einen Wert ungleich Null festgelegt ist.
nCharSet
Gibt den Zeichensatz der Schriftart an. Geben Sie das lfCharSet
Element in der LOGFONT
Struktur im Windows SDK für eine Liste von Werten an.
Der OEM-Zeichensatz ist systemabhängig.
Schriftarten mit anderen Zeichensätzen können im System vorhanden sein. Eine Anwendung, die eine Schriftart mit einem unbekannten Zeichensatz verwendet, darf nicht versuchen, Zeichenfolgen zu übersetzen oder zu interpretieren, die mit dieser Schriftart gerendert werden sollen. Stattdessen sollten die Zeichenfolgen direkt an den Ausgabegerätetreiber übergeben werden.
Die Schriftartzuordnung verwendet nicht den DEFAULT_CHARSET
Wert. Eine Anwendung kann diesen Wert verwenden, um den Namen und den Schriftgrad einer Schriftart vollständig zu beschreiben. Wenn keine Schriftart mit dem angegebenen Namen vorhanden ist, kann eine Schriftart aus einem beliebigen Zeichensatz durch die angegebene Schriftart ersetzt werden. Um unerwartete Ergebnisse zu vermeiden, sollten Anwendungen den DEFAULT_CHARSET
Wert sparsam verwenden.
nOutPrecision
Gibt die gewünschte Ausgabegenauigkeit an. Die Ausgabegenauigkeit definiert, wie genau die Ausgabe mit der Höhe, Breite, Zeichenausrichtung, Escapezeichen und Neigung der angeforderten Schriftart übereinstimmen muss. lfOutPrecision
Eine Liste der Werte und weitere Informationen finden Sie im Member in der LOGFONT
Struktur im Windows SDK.
nClipPrecision
Gibt die gewünschte Beschneidungsgenauigkeit an. Die Beschneidungsgenauigkeit definiert, wie Zeichen abgeschnitten werden, die sich teilweise außerhalb des Beschneidungsbereichs befinden. lfClipPrecision
Eine Liste der Werte finden Sie im Member in der LOGFONT
Struktur im Windows SDK.
Um eine eingebettete schreibgeschützte Schriftart zu verwenden, muss eine Anwendung angeben CLIP_ENCAPSULATE
.
Um eine konsistente Drehung von Geräte-, TrueType- und Vektorschriftarten zu erzielen, kann eine Anwendung den bitweisen OR-Operator (|
) verwenden, um den CLIP_LH_ANGLES
Wert mit einem der anderen nClipPrecision
Werte zu kombinieren. Wenn das CLIP_LH_ANGLES
Bit festgelegt ist, hängt die Drehung für alle Schriftarten davon ab, ob die Ausrichtung des Koordinatensystems linkshändig oder rechtshändig ist. (Weitere Informationen zur Ausrichtung von Koordinatensystemen finden Sie in der Beschreibung des nOrientation
Parameters.) Wenn CLIP_LH_ANGLES
nicht festgelegt, drehen Geräteschriftarten immer gegen den Uhrzeigersinn, aber die Drehung anderer Schriftarten hängt von der Ausrichtung des Koordinatensystems ab.
nQuality
Gibt die Ausgabequalität der Schriftart an, die definiert, wie sorgfältig der GDI versuchen muss, die Attribute der logischen Schriftart mit denen einer tatsächlichen physischen Schriftart abzugleichen. lfQuality
Eine Liste der Werte finden Sie im Member in der LOGFONT
Struktur im Windows SDK.
nPitchAndFamily
Gibt den Neigungswinkel und die Familie der Schriftart an. lfPitchAndFamily
Eine Liste der Werte und weitere Informationen finden Sie im Member in der LOGFONT
Struktur im Windows SDK.
lpszFacename
Ein CString
oder ein Zeiger auf eine mit Null beendete Zeichenfolge, die den Schriftartnamen angibt. Die Länge dieser Zeichenfolge darf 30 Zeichen nicht überschreiten. Die Windows-Funktion EnumFontFamilies
kann zum Aufzählen aller derzeit verfügbaren Schriftarten verwendet werden. Ist lpszFacename
dies NULL
der Grund, verwendet die GDI eine geräteunabhängige Schriftart.
Rückgabewert
Ungleich Null, wenn erfolgreich, andernfalls 0 (Null).
Hinweise
Die Schriftart kann anschließend als Schriftart für jeden Gerätekontext ausgewählt werden.
Die CreateFont
Funktion erstellt keine neue Windows GDI-Schriftart. Es wählt lediglich die nächstgelegene Übereinstimmung aus den physischen Schriftarten aus, die für die GDI verfügbar sind.
Anwendungen können beim Erstellen einer logischen Schriftart die Standardeinstellungen für die meisten Parameter verwenden. Die Parameter, die immer bestimmte Werte erhalten sollen, sind nHeight
und lpszFacename
. Wenn nHeight
und lpszFacename
nicht von der Anwendung festgelegt wird, ist die logische Schriftart, die erstellt wird, geräteabhängig.
Wenn Sie mit dem CFont
von der CreateFont
Funktion erstellten Objekt fertig sind, verwenden Sie diese Option CDC::SelectObject
, um eine andere Schriftart im Gerätekontext auszuwählen, und löschen Sie dann das CFont
Objekt, das nicht mehr benötigt wird.
Beispiel
// The code fragment shows how to create a font object,
// select the font object into a DC (device context) for text
// drawing, and finally delete the font object.
// Initializes a CFont object with the specified characteristics.
CFont font;
VERIFY(font.CreateFont(
12, // nHeight
0, // nWidth
0, // nEscapement
0, // nOrientation
FW_NORMAL, // nWeight
FALSE, // bItalic
FALSE, // bUnderline
0, // cStrikeOut
ANSI_CHARSET, // nCharSet
OUT_DEFAULT_PRECIS, // nOutPrecision
CLIP_DEFAULT_PRECIS, // nClipPrecision
DEFAULT_QUALITY, // nQuality
DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
_T("Arial"))); // lpszFacename
// Do something with the font just created...
CClientDC dc(this);
CFont *def_font = dc.SelectObject(&font);
dc.TextOut(5, 5, _T("Hello"), 5);
dc.SelectObject(def_font);
// Done with the font. Delete the font object.
font.DeleteObject();
CFont::CreateFontIndirect
Initialisiert ein CFont
Objekt mit den in einer LOGFONT
Struktur angegebenen Merkmalen.
BOOL CreateFontIndirect(const LOGFONT* lpLogFont);
Parameter
lpLogFont
Verweist auf eine LOGFONT
Struktur, die die Merkmale der logischen Schriftart definiert.
Rückgabewert
Ungleich Null, wenn erfolgreich, andernfalls 0 (Null).
Hinweise
Die Schriftart kann anschließend als aktuelle Schriftart für jedes Gerät ausgewählt werden.
Diese Schriftart weist die in der LOGFONT
Struktur angegebenen Merkmale auf. Wenn die Schriftart mithilfe der CDC::SelectObject
Memberfunktion ausgewählt wird, versucht die GDI-Schriftartzuordnung, die logische Schriftart mit einer vorhandenen physischen Schriftart abzugleichen. Wenn die Schriftartzuordnung keine genaue Übereinstimmung für die logische Schriftart findet, wird eine alternative Schriftart bereitgestellt, deren Merkmale so viele der angeforderten Merkmale wie möglich entsprechen.
Wenn Sie das CFont
von der CreateFontIndirect
Funktion erstellte Objekt nicht mehr benötigen, verwenden Sie diese Option CDC::SelectObject
, um eine andere Schriftart im Gerätekontext auszuwählen, und löschen Sie das CFont
Objekt, das nicht mehr benötigt wird.
Beispiel
// The code fragment shows how to create a font object,
// select the font object into a DC (device context) for text
// drawing, and finally delete the font object.
// Initializes a CFont object with the characteristics given
// in a LOGFONT structure.
CFont font;
LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT)); // zero out structure
lf.lfHeight = 12; // request a 12-pixel-height font
_tcsncpy_s(lf.lfFaceName, LF_FACESIZE,
_T("Arial"), 7); // request a face name "Arial"
VERIFY(font.CreateFontIndirect(&lf)); // create the font
// Do something with the font just created...
CClientDC dc(this);
CFont *def_font = dc.SelectObject(&font);
dc.TextOut(5, 5, _T("Hello"), 5);
dc.SelectObject(def_font);
// Done with the font. Delete the font object.
font.DeleteObject();
CFont::CreatePointFont
Diese Funktion bietet eine einfache Möglichkeit, eine Schriftart mit einer angegebenen Schriftart und einem angegebenen Schriftgrad zu erstellen.
BOOL CreatePointFont(
int nPointSize,
LPCTSTR lpszFaceName,
CDC* pDC = NULL);
Parameter
nPointSize
Angeforderte Schrifthöhe in Zehnteln eines Punkts. (Übergeben Sie beispielsweise 120, um eine 12-Punkt-Schriftart anzufordern.)
lpszFaceName
Ein CString
oder ein Zeiger auf eine mit Null beendete Zeichenfolge, die den Schriftartnamen angibt. Die Länge dieser Zeichenfolge darf 30 Zeichen nicht überschreiten. Die Windows-Funktion EnumFontFamilies
kann zum Aufzählen aller derzeit verfügbaren Schriftarten verwendet werden. Ist lpszFaceName
dies NULL
der Grund, verwendet die GDI eine geräteunabhängige Schriftart.
pDC
Zeiger auf das CDC
Objekt, das verwendet werden soll, um die Höhe in nPointSize
logische Einheiten zu konvertieren. Wenn NULL
, wird ein Bildschirmgerätekontext für die Konvertierung verwendet.
Rückgabewert
Wenn dies erfolgreich ist, andernfalls 0.
Hinweise
Die Höhe wird automatisch mithilfe des CDC-Objekts, auf das pDC
verwiesen wird, in nPointSize
logische Einheiten konvertiert.
Wenn Sie mit dem CFont
von der CreatePointFont
Funktion erstellten Objekt fertig sind, wählen Sie zuerst die Schriftart aus dem Gerätekontext aus, und löschen Sie das CFont
Objekt.
Beispiel
// The code fragment shows how to create a font object,
// select the font object into a DC (device context) for text
// drawing, and finally delete the font object.
CClientDC dc(this);
CFont font;
VERIFY(font.CreatePointFont(120, _T("Arial"), &dc));
// Do something with the font just created...
CFont *def_font = dc.SelectObject(&font);
dc.TextOut(5, 5, _T("Hello"), 5);
dc.SelectObject(def_font);
// Done with the font. Delete the font object.
font.DeleteObject();
CFont::CreatePointFontIndirect
Diese Funktion ist identisch mit CreateFontIndirect
der Ausnahme, dass das lfHeight
Element des LOGFONT
Elements in Zehnteln eines Punkts und nicht in Geräteeinheiten interpretiert wird.
BOOL CreatePointFontIndirect(
const LOGFONT* lpLogFont,
CDC* pDC = NULL);
Parameter
lpLogFont
Verweist auf eine LOGFONT
Struktur, die die Merkmale der logischen Schriftart definiert. Das lfHeight
Element der LOGFONT
Struktur wird in Zehnteln eines Punkts und nicht in logischen Einheiten gemessen. (Legen Sie lfHeight
beispielsweise auf 120 fest, um eine 12-Punkt-Schriftart anzufordern.)
pDC
Zeiger auf das CDC
Objekt, das verwendet werden soll, um die Höhe in lfHeight
logische Einheiten zu konvertieren. Wenn NULL
, wird ein Bildschirmgerätekontext für die Konvertierung verwendet.
Rückgabewert
Wenn dies erfolgreich ist, andernfalls 0.
Hinweise
Diese Funktion konvertiert die Höhe lfHeight
automatisch in logische Einheiten, indem das Objekt verwendet wird, auf pDC
das CDC
verwiesen wird, bevor die LOGFONT
Struktur an Windows übergeben wird.
Wenn Sie mit dem CFont
von der CreatePointFontIndirect
Funktion erstellten Objekt fertig sind, wählen Sie zuerst die Schriftart aus dem Gerätekontext aus, und löschen Sie das CFont
Objekt.
Beispiel
// The code fragment shows how to create a font object,
// select the font object into a DC (device context) for text
// drawing, and finally delete the font object.
LOGFONT lf;
// clear out structure.
memset(&lf, 0, sizeof(LOGFONT));
// request a 12-pixel-height font
lf.lfHeight = 120;
// request a face name "Arial".
_tcsncpy_s(lf.lfFaceName, LF_FACESIZE, _T("Arial"), 7);
CClientDC dc(this);
CFont font;
VERIFY(font.CreatePointFontIndirect(&lf, &dc));
// Do something with the font just created...
CFont *def_font = dc.SelectObject(&font);
dc.TextOut(5, 5, _T("Hello"), 5);
dc.SelectObject(def_font);
// Done with the font. Delete the font object.
font.DeleteObject();
CFont::FromHandle
Gibt einen Zeiger auf ein CFont
Objekt zurück, wenn ein HFONT
Handle auf ein Windows GDI-Schriftartobjekt übergeben wird.
static CFont* PASCAL FromHandle(HFONT hFont);
Parameter
hFont
Ein HFONT
Handle für eine Windows-Schriftart.
Rückgabewert
Ein Zeiger auf ein CFont
Objekt bei erfolgreicher Ausführung; andernfalls NULL
.
Hinweise
Wenn ein CFont
Objekt noch nicht an das Handle angefügt ist, wird ein temporäres CFont
Objekt erstellt und angefügt. Dieses temporäre CFont
Objekt ist nur gültig, bis die Anwendung das nächste Mal leerlauf in der Ereignisschleife hat, zu dem zeitpunkt alle temporären Grafikobjekte gelöscht werden. Eine weitere Möglichkeit, dies zu sagen, ist, dass das temporäre Objekt nur während der Verarbeitung einer Fenstermeldung gültig ist.
Beispiel
// The code fragment shows how to create a font object using
// Windows API CreateFontIndirect(), convert the HFONT to a
// CFont* before selecting the font object into a DC (device
// context) for text drawing, and finally delete the font object.
// Initialize a CFont object with the characteristics given
// in a LOGFONT structure.
LOGFONT lf;
// clear out structure
memset(&lf, 0, sizeof(LOGFONT));
// request a 12-pixel-height font
lf.lfHeight = 12;
// request a face name "Arial"
_tcsncpy_s(lf.lfFaceName, LF_FACESIZE, _T("Arial"), 7);
// create the font
HFONT hfont = ::CreateFontIndirect(&lf);
// Convert the HFONT to CFont*.
CFont *pfont = CFont::FromHandle(hfont);
// Do something with the font just created...
CClientDC dc(this);
CFont *def_font = dc.SelectObject(pfont);
dc.TextOut(5, 5, _T("Hello"), 5);
dc.SelectObject(def_font);
// Done with the font. Delete the font object.
::DeleteObject(hfont);
CFont::GetLogFont
Rufen Sie diese Funktion auf, um eine Kopie der LOGFONT
Struktur für CFont
.
int GetLogFont(LOGFONT* pLogFont);
Parameter
pLogFont
Zeigen Sie auf die LOGFONT
Struktur, um die Schriftartinformationen zu erhalten.
Rückgabewert
Nonzero, wenn die Funktion erfolgreich ist, andernfalls 0.
Beispiel
// The code fragment shows how to retrieve a copy of the
// LOGFONT structure for a currently selected font of a window.
CFont *pFont = pWnd->GetFont();
if (NULL != pFont)
{
LOGFONT lf;
pFont->GetLogFont(&lf);
TRACE(_T("Typeface name of font = %s\n"), lf.lfFaceName);
}
CFont::operator HFONT
Verwenden Sie diesen Operator, um das Windows GDI-Handle der Schriftart abzurufen, die dem CFont
Objekt zugeordnet ist.
operator HFONT() const;
Rückgabewert
Das Handle des Windows GDI-Schriftartobjekts, das CFont
bei erfolgreicher Ausführung angefügt ist; andernfalls NULL
.
Hinweise
Da dieser Operator automatisch für Konvertierungen von CFont
Schriftarten und Text verwendet wird, können Sie Objekte an Funktionen übergeben CFont
, die erwartet HFONT
werden.
Weitere Informationen zur Verwendung von Grafikobjekten finden Sie unter "Grafikobjekte " im Windows SDK.
Beispiel
// The code fragment shows the usage of CFont::operator HFONT.
// Initialize a CFont object with the characteristics given
// in a LOGFONT structure.
LOGFONT lf;
// clear out structure
memset(&lf, 0, sizeof(LOGFONT));
// request a 12-pixel-height font
lf.lfHeight = 12;
// request a face name "Arial"
_tcsncpy_s(lf.lfFaceName, LF_FACESIZE, _T("Arial"), 7);
CFont font1;
font1.CreateFontIndirect(&lf); // create the font
// CFont::operator HFONT automatically converts font1 from
// CFont* to HFONT.
CFont *font2 = CFont::FromHandle(font1);
// Do something with the font just created...
CClientDC dc(this);
CFont *def_font = dc.SelectObject(font2);
dc.TextOut(5, 5, _T("Hello"), 5);
dc.SelectObject(def_font);
// Done with the font. Delete the font object.
font1.DeleteObject();