Freigeben über


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 CreatePointFontIndirectverwenden 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 CFontfinden Sie unter Graphic Objects.

Vererbungshierarchie

CObject

CGdiObject

CFont

Anforderungen

Header: afxwin.h

CFont::CFont

Erstellt ein CFont-Objekt.

CFont();

Hinweise

Das resultierende Objekt muss mit CreateFont, CreateFontIndirect, , CreatePointFontoder 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 LOGFONTStruktur 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_REGULARund 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 NULLder 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 LOGFONTStruktur 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 NULLder 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 pDCverwiesen 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 HFONTwerden.

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();

Siehe auch

MFC-Beispiel HIERSVR
CGdiObject Klasse
Hierarchiediagramm