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
, CreatePointFont
CreateFontIndirect
, nebo CreatePointFontIndirect
a 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 CFont
v tématu Grafické objekty.
Hierarchie dědičnosti
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
, CreatePointFont
nebo 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 LOGFONT
struktury 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_REGULAR
a 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 NULL
se 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ý pDC
odkazuje .
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 NULL
se 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();