Sdílet prostřednictvím


CFont Třída

Zapouzdřuje písmo grafického zařízení s Windows (GDI) a poskytuje členské funkce pro manipulaci s písmem.

Syntaxe

class CFont : public CGdiObject

Členové

Veřejné konstruktory

Název Popis
CFont::CFont CFont Vytvoří objekt.

Veřejné metody

Název Popis
CFont::CreateFont Inicializuje s CFont určenými charakteristikami.
CFont::CreateFontIndirect Inicializuje CFont objekt s charakteristikami zadanými ve struktuře LOGFONT .
CFont::CreatePointFont Inicializuje hodnotu se zadanou CFont výškou měřenou v desetinách bodu a typeface.
CFont::CreatePointFontIndirect CreateFontIndirect S výjimkou toho, že výška písma se měří v desátých bodech místo logických jednotek.
CFont::FromHandle Vrátí ukazatel na CFont objekt při zadání windows HFONT.
CFont::GetLogFont LOGFONT Vyplní informace o logickém písmu připojeném k objektuCFont.

Veřejné operátory

Název Popis
CFont::operator HFONT Vrátí popisovač písma GDI windows připojený k objektu CFont .

Poznámky

Chcete-li použít CFont objekt, vytvořte CFont objekt a připojte k němu písmo Systému Windows pomocí CreateFont, CreatePointFontCreateFontIndirect, nebo CreatePointFontIndirecta pak pomocí členských funkcí objektu manipulovat s písmem.

CreatePointFontIndirect Funkce CreatePointFont jsou často snadněji použitelné než CreateFont nebo CreateFontIndirect protože provádějí převod výšky písma z velikosti bodu na logické jednotky automaticky.

Další informace naleznete CFontv tématu Grafické objekty.

Hierarchie dědičnosti

CObject

CGdiObject

CFont

Požadavky

Záhlaví: afxwin.h

CFont::CFont

CFont Vytvoří objekt.

CFont();

Poznámky

Výsledný objekt musí být inicializován pomocí CreateFont, CreateFontIndirect, CreatePointFontnebo CreatePointFontIndirect před jeho použitím.

Příklad

CFont font;

CFont::CreateFont

Inicializuje CFont objekt se zadanými charakteristikami.

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
Určuje požadovanou výšku písma (v logických jednotkách). Popis najdete v lfHeight členu LOGFONTstruktury v sadě Windows SDK. Absolutní hodnota nesmí po převodu nHeight překročit 16 384 jednotek zařízení. Pro všechna porovnání výšky hledá mapovač písma největší písmo, které nepřekračuje požadovanou velikost nebo nejmenší písmo, pokud všechna písma překračují požadovanou velikost.

nWidth
Určuje průměrnou šířku znaků (v logických jednotkách) písma. Pokud nWidth je 0, poměr stran zařízení se porovná s poměrem stran digitalizace dostupných písem k nalezení nejbližší shody, která je určena absolutní hodnotou rozdílu.

nEscapement
Určuje úhel (v jednotkách 0,1 stupňů) mezi řídicím vektorem a osou x povrchu displeje. Řídicí vektor je přímka počátku prvních a posledních znaků na řádku. Úhel se měří proti směru hodinových ručiček z osy x. lfEscapement Další informace najdete ve LOGFONT struktuře v sadě Windows SDK.

nOrientation
Určuje úhel (v jednotkách 0,1 stupňů) mezi účaří znaku a osou x. Úhel se měří proti směru hodinových ručiček z osy x pro souřadnicové systémy, ve kterých je směr y dolů a ve směru hodinových ručiček od osy x pro souřadnicové systémy, ve kterých je směr y nahoru.

nWeight
Určuje tloušťku písma (rukopisné pixely na 1 000). lfWeight Další informace najdete ve LOGFONT struktuře v sadě Windows SDK. Popsané hodnoty jsou přibližné; skutečný vzhled závisí na řezu písma. Některá písma mají pouze FW_NORMAL, FW_REGULARa FW_BOLD váhy. Pokud FW_DONTCARE je zadána, použije se výchozí váha.

bItalic
Určuje, jestli je písmo kurzívou.

bUnderline
Určuje, jestli je písmo podtržené.

cStrikeOut
Určuje, zda jsou znaky v písmu zaškrtnuty. Určuje přeškrtnutí písma, pokud je nastavená na nenulovou hodnotu.

nCharSet
Určuje znakovou sadu písmaZobrazit lfCharSet člen ve struktuře v LOGFONT sadě Windows SDK pro seznam hodnot.

Znaková sada OEM je závislá na systému.

Písma s jinými znakovými sadami můžou v systému existovat. Aplikace, která používá písmo s neznámou znakovou sadou, se nesmí pokoušet překládat ani interpretovat řetězce, které se mají vykreslit s tímto písmem. Místo toho by se řetězce měly předat přímo ovladači výstupního zařízení.

Mapovač písma tuto hodnotu nepoužívá DEFAULT_CHARSET . Aplikace může tuto hodnotu použít k tomu, aby název a velikost písma plně popsala logické písmo. Pokud písmo se zadaným názvem neexistuje, může být písmo z jakékoli znakové sady nahrazeno zadaným písmem. Aby se zabránilo neočekávaným výsledkům, měly by aplikace tuto hodnotu používat DEFAULT_CHARSET střídmě.

nOutPrecision
Určuje požadovanou přesnost výstupu. Přesnost výstupu definuje, jak přesně se musí výstup shodovat s výškou, šířkou, orientací znaků, řídicím znakem a výškou požadovaného písma. lfOutPrecision Seznam hodnot a další informace najdete ve LOGFONT struktuře v sadě Windows SDK.

nClipPrecision
Určuje požadovanou přesnost výřezu. Přesnost výřezu definuje, jak vystřihovat znaky, které jsou částečně mimo oblast výřezu. lfClipPrecision Seznam hodnot najdete ve LOGFONT struktuře v sadě Windows SDK.

Chcete-li použít vložené písmo jen pro čtení, musí aplikace zadat CLIP_ENCAPSULATE.

K dosažení konzistentní rotace zařízení, TrueType a vektorových písem může aplikace pomocí bitové operátoru OR (|) zkombinovat CLIP_LH_ANGLES hodnotu s libovolnou jinou nClipPrecision hodnotou. CLIP_LH_ANGLES Pokud je bit nastavený, otočení pro všechna písma závisí na tom, jestli je orientace souřadnicového systému levá nebo pravá. (Další informace o orientaci souřadnicových systémů najdete v popisu parametru nOrientation .) Pokud CLIP_LH_ANGLES není nastavená, písma zařízení vždy otočí proti směru hodinových ručiček, ale otočení jiných písem závisí na orientaci souřadnicového systému.

nQuality
Určuje kvalitu výstupu písma, která definuje, jak pečlivě se musí GDI pokoušet shodovat s atributy logického písma s atributy skutečného fyzického písma. lfQuality Seznam hodnot najdete ve LOGFONT struktuře v sadě Windows SDK.

nPitchAndFamily
Určuje výšku a rodinu písma. lfPitchAndFamily Seznam hodnot a další informace najdete ve LOGFONT struktuře v sadě Windows SDK.

lpszFacename
Nebo CString ukazatel na řetězec ukončený hodnotou null, který určuje název písma. Délka tohoto řetězce nesmí překročit 30 znaků. Funkci Windows EnumFontFamilies lze použít k vytvoření výčtu všech aktuálně dostupných písem. Pokud lpszFacename ano NULL, GDI používá typ nezávislý na zařízení.

Návratová hodnota

Nenulové, pokud je úspěšné; jinak 0.

Poznámky

Písmo lze následně vybrat jako písmo pro jakýkoli kontext zařízení.

Funkce CreateFont nevytvoří nové písmo GDI systému Windows. Pouze vybere nejbližší shodu z fyzických písem dostupných pro GDI.

Aplikace můžou při vytváření logického písma použít výchozí nastavení pro většinu parametrů. Parametry, které by měly být vždy dány konkrétními hodnotami, jsou nHeight a lpszFacename. Pokud nHeight a lpszFacename nejsou nastaveny aplikací, je logické písmo, které je vytvořeno, závislé na zařízení.

Až dokončíte s CFont objektem vytvořeným CreateFont funkcí, použijte CDC::SelectObject k výběru jiného písma v kontextu zařízení a odstranění objektu CFont , který už nepotřebujete.

Příklad

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

Inicializuje CFont objekt s charakteristikami zadanými ve struktuře LOGFONT.

BOOL CreateFontIndirect(const LOGFONT* lpLogFont);

Parametry

lpLogFont
Odkazuje na LOGFONT strukturu, která definuje charakteristiky logického písma.

Návratová hodnota

Nenulové, pokud je úspěšné; jinak 0.

Poznámky

Písmo lze následně vybrat jako aktuální písmo pro jakékoli zařízení.

Toto písmo má vlastnosti zadané ve struktuře LOGFONT . Pokud je písmo vybráno pomocí CDC::SelectObject členské funkce, mapovač písma GDI se pokusí shodovat s logickým písmem s existujícím fyzickým písmem. Pokud mapovač písma nenajde přesnou shodu logického písma, poskytne alternativní písmo, jehož charakteristiky odpovídají co nejvíce požadovaným charakteristikám.

Pokud už objekt vytvořený CreateFontIndirect funkcí nepotřebujeteCFont, použijte CDC::SelectObject k výběru jiného písma v kontextu zařízení a odstranění objektuCFont, který už nepotřebujete.

Příklad

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

Tato funkce poskytuje jednoduchý způsob, jak vytvořit písmo zadaného typu a velikosti bodu.

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

Parametry

nPointSize
Požadovaná výška písma v desetinách bodu (Pokud například chcete požádat o 12bodové písmo, předejte 120.)

lpszFaceName
Nebo CString ukazatel na řetězec ukončený hodnotou null, který určuje název písma. Délka tohoto řetězce nesmí překročit 30 znaků. Funkci Windows EnumFontFamilies lze použít k vytvoření výčtu všech aktuálně dostupných písem. Pokud lpszFaceName ano NULL, GDI používá typ nezávislý na zařízení.

pDC
Ukazatel na CDC objekt, který se má použít k převodu výšky nPointSize na logické jednotky. Pokud NULLse pro převod použije kontext zařízení obrazovky.

Návratová hodnota

Nenulové, pokud je úspěšné, jinak 0.

Poznámky

Automaticky převede výšku nPointSize na logické jednotky pomocí objektu CDC, na který pDCodkazuje .

Po dokončení s objektem CFont vytvořeným CreatePointFont funkcí nejprve vyberte písmo z kontextu zařízení a pak objekt odstraňte CFont .

Příklad

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

Tato funkce je stejná jako CreateFontIndirect v případě, že lfHeight člen objektu LOGFONT je interpretován v desátých bodech místo jednotek zařízení.

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

Parametry

lpLogFont
Odkazuje na LOGFONT strukturu, která definuje charakteristiky logického písma. Člen lfHeight LOGFONT struktury se měří v desetinách bodu místo logických jednotek. (Pokud například chcete požádat o 12bodové písmo, nastavte lfHeight hodnotu 120.)

pDC
Ukazatel na CDC objekt, který se má použít k převodu výšky lfHeight na logické jednotky. Pokud NULLse pro převod použije kontext zařízení obrazovky.

Návratová hodnota

Nenulové, pokud je úspěšné, jinak 0.

Poznámky

Tato funkce automaticky převede výšku lfHeight na logické jednotky pomocí objektuCDC, na který odkazuje, před předáním LOGFONT pDC struktury do systému Windows.

Po dokončení s objektem CFont vytvořeným CreatePointFontIndirect funkcí nejprve vyberte písmo z kontextu zařízení a pak objekt odstraňte CFont .

Příklad

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

Vrátí ukazatel na CFont objekt při zadání HFONT úchytu objektu písma GDI systému Windows.

static CFont* PASCAL FromHandle(HFONT hFont);

Parametry

hFont
Úchyt HFONT pro písmo Windows.

Návratová hodnota

Ukazatel na CFont objekt, pokud je úspěšný; jinak NULL.

Poznámky

CFont Pokud objekt ještě není připojený k popisovači, vytvoří se dočasný CFont objekt a připojí se. Tento dočasný CFont objekt je platný pouze do okamžiku, kdy aplikace ve smyčce událostí nečiní, kdy se odstraní všechny dočasné grafické objekty. Dalším způsobem, jak to říct, je, že dočasný objekt je platný pouze během zpracování jedné zprávy okna.

Příklad

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

Voláním této funkce načtěte kopii LOGFONT struktury pro CFont.

int GetLogFont(LOGFONT* pLogFont);

Parametry

pLogFont
Ukazatel na LOGFONT strukturu pro příjem informací o písmu

Návratová hodnota

Nenulové, pokud je funkce úspěšná, jinak 0.

Příklad

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

Tento operátor slouží k získání úchytu GDI systému Windows písma připojeného k objektu CFont .

operator HFONT() const;

Návratová hodnota

Popisovač objektu písma GDI windows připojeného v CFont případě úspěchu; jinak NULL.

Poznámky

Vzhledem k tomu, že tento operátor se automaticky používá pro převody z CFont písma a textu, můžete předat CFont objekty funkcím, které očekávajíHFONT.

Další informace o používání grafických objektů naleznete v tématu Grafické objekty v sadě Windows SDK.

Příklad

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

Viz také

Mfc – ukázka HIERSVR
CGdiObject Třída
Graf hierarchie