CFont Klasa

Hermetyzuje czcionkę interfejsu urządzenia graficznego systemu Windows (GDI) i udostępnia funkcje członkowskie do manipulowania czcionką.

Składnia

class CFont : public CGdiObject

Członkowie

Konstruktory publiczne

Nazwa/nazwisko opis
CFont::CFont CFont Tworzy obiekt.

Metody publiczne

Nazwa/nazwisko opis
CFont::CreateFont Inicjuje element CFont o określonych cechach.
CFont::CreateFontIndirect Inicjuje CFont obiekt o cechach podanych w LOGFONT strukturze.
CFont::CreatePointFont Inicjuje element CFont o określonej wysokości, mierzony w dziesiątych punktach i kroju.
CFont::CreatePointFontIndirect Tak samo jak CreateFontIndirect w przypadku, gdy wysokość czcionki jest mierzona w dziesiątych częściach punktu, a nie jednostek logicznych.
CFont::FromHandle Zwraca wskaźnik do CFont obiektu w przypadku danego systemu Windows HFONT.
CFont::GetLogFont Wypełnia element LOGFONT informacjami na temat czcionki logicznej dołączonej CFont do obiektu.

Operatory publiczne

Nazwa/nazwisko opis
CFont::operator HFONT Zwraca uchwyt czcionki GDI systemu Windows dołączony do CFont obiektu.

Uwagi

Aby użyć CFont obiektu, skonstruuj CFont obiekt i dołącz do niego czcionkę systemu Windows za pomocą CreateFontCreateFontIndirect, , CreatePointFontlub CreatePointFontIndirect, a następnie użyj funkcji składowych obiektu, aby manipulować czcionką.

Funkcje CreatePointFont i CreatePointFontIndirect są często łatwiejsze do użycia niż CreateFont lub CreateFontIndirect ponieważ wykonują konwersję na wysokość czcionki z rozmiaru punktu do jednostek logicznych automatycznie.

Aby uzyskać więcej informacji na temat CFontprogramu , zobacz Obiekty graficzne.

Hierarchia dziedziczenia

CObject

CGdiObject

CFont

Wymagania

Nagłówka:afxwin.h

CFont::CFont

CFont Tworzy obiekt.

CFont();

Uwagi

Wynikowy obiekt musi zostać zainicjowany za pomocą CreateFontmetody , CreateFontIndirect, CreatePointFontlub CreatePointFontIndirect , zanim będzie można go użyć.

Przykład

CFont font;

CFont::CreateFont

Inicjuje CFont obiekt o określonych cechach.

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

Parametry

nHeight
Określa żądaną wysokość (w jednostkach logicznych) czcionki. lfHeight Aby uzyskać opis, zobacz element członkowski LOGFONTstruktury w zestawie Windows SDK. Wartość bezwzględna nHeight nie może przekraczać 16 384 jednostek urządzenia po jej przekonwertowaniu. W przypadku wszystkich porównań wysokości maper czcionek szuka największej czcionki, która nie przekracza żądanego rozmiaru lub najmniejszej czcionki, jeśli wszystkie czcionki przekraczają żądany rozmiar.

nWidth
Określa średnią szerokość (w jednostkach logicznych) znaków czcionki. Jeśli nWidth wartość to 0, współczynnik proporcji urządzenia zostanie dopasowany do współczynnika proporcji cyfryzacji dostępnych czcionek w celu znalezienia najbliższego dopasowania, który jest określany przez bezwzględną wartość różnicy.

nEscapement
Określa kąt (w jednostkach 0,1 stopni) między wektorem ucieczki a osią x powierzchni ekranu. Wektor ucieczki to linia przechodząca przez początek pierwszych i ostatnich znaków w wierszu. Kąt jest mierzony w kierunku odwrotnym od osi x. Aby uzyskać więcej informacji, zobacz element lfEscapement członkowski w LOGFONT strukturze zestawu Windows SDK.

nOrientation
Określa kąt (w jednostkach 0,1 stopni) między punktem odniesienia znaku a osią x. Kąt jest mierzony w kierunku odwrotnym od osi x dla układów współrzędnych, w których kierunek y jest w dół i zgodnie z ruchem wskazówek zegara z osi x dla układów współrzędnych, w których kierunek y jest w górę.

nWeight
Określa wagę czcionki (w pikselach atramentowych na 1000). Aby uzyskać więcej informacji, zobacz element lfWeight członkowski w LOGFONT strukturze zestawu Windows SDK. Opisane wartości są przybliżone; rzeczywisty wygląd zależy od czcionki. Niektóre czcionki mają tylko FW_NORMALwagi , FW_REGULARi FW_BOLD . Jeśli FW_DONTCARE zostanie określony, zostanie użyta domyślna waga.

bItalic
Określa, czy czcionka jest kursywa.

bUnderline
Określa, czy czcionka jest podkreślona.

cStrikeOut
Określa, czy znaki czcionki są wykreślone. Określa czcionkę przekreślenia, jeśli jest ustawiona na wartość niezerową.

nCharSet
Określa zestaw znaków czcionkiPojmij lfCharSet element członkowski w LOGFONT strukturze zestawu Windows SDK, aby uzyskać listę wartości.

Zestaw znaków OEM jest zależny od systemu.

Czcionki z innymi zestawami znaków mogą istnieć w systemie. Aplikacja używająca czcionki z nieznanym zestawem znaków nie może próbować tłumaczyć ani interpretować ciągów, które mają być renderowane za pomocą tej czcionki. Zamiast tego ciągi powinny być przekazywane bezpośrednio do sterownika urządzenia wyjściowego.

Maper czcionek nie używa DEFAULT_CHARSET wartości. Aplikacja może użyć tej wartości, aby zezwolić na pełne opisanie czcionki logicznej nazwy i rozmiaru czcionki. Jeśli czcionka o określonej nazwie nie istnieje, czcionka z dowolnego zestawu znaków może zostać zastąpiona określoną czcionką. Aby uniknąć nieoczekiwanych wyników, aplikacje powinny używać DEFAULT_CHARSET wartości oszczędnie.

nOutPrecision
Określa żądaną precyzję danych wyjściowych. Precyzja danych wyjściowych określa, jak ściśle dane wyjściowe muszą odpowiadać wysokości, szerokości, orientacji znaku, uciekinieru i skoku żądanej czcionki. Zobacz element lfOutPrecision członkowski w LOGFONT strukturze w zestawie Windows SDK, aby uzyskać listę wartości i więcej informacji.

nClipPrecision
Określa żądaną precyzję przycinania. Precyzja wycinania określa sposób tworzenia wycinków znaków częściowo spoza regionu wycinków. Aby uzyskać listę wartości, zobacz element lfClipPrecision członkowski w LOGFONT strukturze w zestawie Windows SDK.

Aby użyć osadzonej czcionki tylko do odczytu, aplikacja musi określić wartość CLIP_ENCAPSULATE.

Aby osiągnąć spójną rotację czcionek urządzenia, wartości TrueType i wektorów, aplikacja może używać operatora bitowego OR (|), aby połączyć CLIP_LH_ANGLES wartość z dowolną z innych nClipPrecision wartości. CLIP_LH_ANGLES Jeśli bit jest ustawiony, obrót dla wszystkich czcionek zależy od tego, czy orientacja układu współrzędnych jest leworęczna czy praworęczna. (Aby uzyskać więcej informacji na temat orientacji układów współrzędnych, zobacz opis parametru nOrientation ). Jeśli CLIP_LH_ANGLES nie jest ustawiona, czcionki urządzenia zawsze obracają się w lewo, ale obrót innych czcionek zależy od orientacji układu współrzędnych.

nQuality
Określa jakość danych wyjściowych czcionki, która definiuje, jak dokładnie GDI musi próbować dopasować atrybuty czcionki logicznej do rzeczywistych czcionek fizycznych. Aby uzyskać listę wartości, zobacz element lfQuality członkowski w LOGFONT strukturze w zestawie Windows SDK.

nPitchAndFamily
Określa wysokość i rodzinę czcionki. Zobacz element lfPitchAndFamily członkowski w LOGFONT strukturze w zestawie Windows SDK, aby uzyskać listę wartości i więcej informacji.

lpszFacename
Znak CString lub wskaźnik do ciągu zakończonego wartością null, który określa nazwę czcionki. Długość tego ciągu nie może przekraczać 30 znaków. Funkcja systemu Windows EnumFontFamilies może służyć do wyliczania wszystkich aktualnie dostępnych czcionek. Jeśli lpszFacename wartość to NULL, interfejs GDI używa niezależnego od urządzenia kroju typów.

Wartość zwracana

Bezzerowe, jeśli się powiedzie; w przeciwnym razie 0.

Uwagi

Czcionkę można następnie wybrać jako czcionkę dla dowolnego kontekstu urządzenia.

Funkcja CreateFont nie tworzy nowej czcionki GDI systemu Windows. Wybiera ono tylko najbliższe dopasowanie z czcionek fizycznych dostępnych dla GDI.

Aplikacje mogą używać ustawień domyślnych dla większości parametrów podczas tworzenia czcionki logicznej. Parametry, które powinny zawsze mieć określone wartości, to nHeight i lpszFacename. Jeśli nHeight aplikacja nie zostanie ustawiona i lpszFacename nie zostanie ustawiona, tworzona czcionka logiczna jest zależna od urządzenia.

Po zakończeniu pracy z obiektem CFont utworzonym przez CreateFont funkcję użyj CDC::SelectObject polecenia , aby wybrać inną czcionkę w kontekście urządzenia, a następnie usunąć CFont obiekt, który nie jest już potrzebny.

Przykład

// 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

Inicjuje CFont obiekt o cechach podanych w LOGFONTstrukturze.

BOOL CreateFontIndirect(const LOGFONT* lpLogFont);

Parametry

lpLogFont
LOGFONT Wskazuje strukturę, która definiuje cechy czcionki logicznej.

Wartość zwracana

Bezzerowe, jeśli się powiedzie; w przeciwnym razie 0.

Uwagi

Czcionkę można następnie wybrać jako bieżącą czcionkę dla dowolnego urządzenia.

Ta czcionka ma cechy określone w LOGFONT strukturze. Po wybraniu czcionki przy użyciu funkcji składowej CDC::SelectObject maper czcionek GDI próbuje dopasować czcionkę logiczną do istniejącej czcionki fizycznej. Jeśli maper czcionki nie znajdzie dokładnego dopasowania dla czcionki logicznej, udostępnia alternatywną czcionkę, której cechy pasują jak najwięcej żądanych cech, jak to możliwe.

Gdy nie potrzebujesz już obiektu utworzonego CFontCreateFontIndirect przez funkcję, użyj polecenia CDC::SelectObject , aby wybrać inną czcionkę w kontekście urządzenia, a następnie usunąć CFont obiekt, który nie jest już potrzebny.

Przykład

// 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

Ta funkcja zapewnia prosty sposób tworzenia czcionki określonej czcionki i rozmiaru punktu.

BOOL CreatePointFont(
    int nPointSize,
    LPCTSTR lpszFaceName,
    CDC* pDC = NULL);

Parametry

nPointSize
Żądano wysokości czcionki w dziesiątych punktach. (Na przykład przekaż 120, aby zażądać czcionki 12-punktowej).

lpszFaceName
Znak CString lub wskaźnik do ciągu zakończonego wartością null, który określa nazwę czcionki. Długość tego ciągu nie może przekraczać 30 znaków. Funkcja systemu Windows EnumFontFamilies może służyć do wyliczania wszystkich aktualnie dostępnych czcionek. Jeśli lpszFaceName wartość to NULL, interfejs GDI używa niezależnego od urządzenia kroju typów.

pDC
Wskaźnik do CDC obiektu, który ma być używany do konwertowania wysokości w nPointSize jednostkach logicznych. Jeśli NULLdo konwersji jest używany kontekst urządzenia ekranu.

Wartość zwracana

Jeśli operacja niezerowa zakończyła się powodzeniem, w przeciwnym razie 0.

Uwagi

Automatycznie konwertuje wysokość na nPointSize jednostki logiczne przy użyciu obiektu CDC wskazywane przez pDC.

Po zakończeniu pracy z obiektem CFont utworzonym CreatePointFont przez funkcję najpierw wybierz czcionkę z kontekstu urządzenia, a następnie usuń CFont obiekt.

Przykład

// 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

Ta funkcja jest taka sama jak CreateFontIndirect ta, z tą różnicą, że lfHeight element członkowski LOGFONT obiektu jest interpretowany w dziesiątych punktach, a nie jednostkach urządzenia.

BOOL CreatePointFontIndirect(
    const LOGFONT* lpLogFont,
    CDC* pDC = NULL);

Parametry

lpLogFont
LOGFONT Wskazuje strukturę, która definiuje cechy czcionki logicznej. Element lfHeight członkowski LOGFONT struktury jest mierzony w dziesiątych punktach, a nie jednostkach logicznych. (Na przykład ustaw wartość lfHeight 120, aby zażądać czcionki 12-punktowej).

pDC
Wskaźnik do CDC obiektu, który ma być używany do konwertowania wysokości w lfHeight jednostkach logicznych. Jeśli NULLdo konwersji jest używany kontekst urządzenia ekranu.

Wartość zwracana

Jeśli operacja niezerowa zakończyła się powodzeniem, w przeciwnym razie 0.

Uwagi

Ta funkcja automatycznie konwertuje wysokość elementu lfHeight na jednostki logiczne przy użyciu obiektu wskazanego CDCpDC przez przed przekazaniem LOGFONT struktury do systemu Windows.

Po zakończeniu pracy z obiektem CFont utworzonym CreatePointFontIndirect przez funkcję najpierw wybierz czcionkę z kontekstu urządzenia, a następnie usuń CFont obiekt.

Przykład

// 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

Zwraca wskaźnik do CFont obiektu, gdy dana HFONT dojście do obiektu czcionki GDI systemu Windows.

static CFont* PASCAL FromHandle(HFONT hFont);

Parametry

hFont
Uchwyt HFONT czcionki systemu Windows.

Wartość zwracana

Wskaźnik do CFont obiektu, jeśli się powiedzie; w przeciwnym razie NULL.

Uwagi

CFont Jeśli obiekt nie jest jeszcze dołączony do uchwytu, zostanie utworzony i dołączony obiekt tymczasowyCFont. Ten obiekt tymczasowy CFont jest prawidłowy tylko do następnego czasu bezczynności aplikacji w pętli zdarzeń, w którym wszystkie tymczasowe obiekty graficzne są usuwane. Innym sposobem stwierdzenia jest to, że obiekt tymczasowy jest prawidłowy tylko podczas przetwarzania jednego komunikatu okna.

Przykład

// 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

Wywołaj tę funkcję, aby pobrać kopię LOGFONT struktury dla elementu CFont.

int GetLogFont(LOGFONT* pLogFont);

Parametry

pLogFont
Wskaźnik do LOGFONT struktury w celu odbierania informacji o czcionkach.

Wartość zwracana

Nonzero, jeśli funkcja powiedzie się, w przeciwnym razie 0.

Przykład

// 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

Użyj tego operatora, aby pobrać uchwyt GDI systemu Windows czcionki dołączonej CFont do obiektu.

operator HFONT() const;

Wartość zwracana

Uchwyt obiektu czcionki GDI systemu Windows dołączony do CFont elementu , jeśli się powiedzie; w przeciwnym razie NULL.

Uwagi

Ponieważ ten operator jest automatycznie używany do konwersji z CFont do czcionek i tekstu, można przekazać CFont obiekty do funkcji, które oczekują HFONT.

Aby uzyskać więcej informacji na temat używania obiektów graficznych, zobacz Obiekty graficzne w zestawie Windows SDK.

Przykład

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

Zobacz też

Przykład MFC HIERSVR
CGdiObject Klasa
Wykres hierarchii