Condividi tramite


Classe CFont

Incapsula un tipo di carattere GDI (Graphics Device Interface) di Windows e fornisce funzioni membro per la modifica del tipo di carattere.

Sintassi

class CFont : public CGdiObject

Membri

Costruttori pubblici

Nome Descrizione
CFont::CFont Costruisce un oggetto CFont.

Metodi pubblici

Nome Descrizione
CFont::CreateFont Inizializza un oggetto CFont con le caratteristiche specificate.
CFont::CreateFontIndirect Inizializza un CFont oggetto con le caratteristiche fornite in una LOGFONT struttura.
CFont::CreatePointFont Inizializza un oggetto CFont con l'altezza specificata, misurata in decimi di punto e carattere tipografico.
CFont::CreatePointFontIndirect Uguale a CreateFontIndirect ad eccezione del fatto che l'altezza del carattere viene misurata in decimi di un punto anziché in unità logiche.
CFont::FromHandle Restituisce un puntatore a un CFont oggetto quando viene specificato un oggetto Windows HFONT.
CFont::GetLogFont Riempie un oggetto LOGFONT con informazioni sul tipo di carattere logico associato all'oggetto CFont .

Operatori pubblici

Nome Descrizione
CFont::operator HFONT Restituisce l'handle del tipo di carattere GDI di Windows associato all'oggetto CFont .

Osservazioni:

Per utilizzare un CFont oggetto, costruire un CFont oggetto e allegare un tipo di carattere di Windows con CreateFont, CreateFontIndirect, CreatePointFonto CreatePointFontIndirecte quindi utilizzare le funzioni membro dell'oggetto per modificare il tipo di carattere.

Le CreatePointFont funzioni e CreatePointFontIndirect sono spesso più facili da usare o CreateFontIndirect CreateFont poiché eseguono automaticamente la conversione per l'altezza del tipo di carattere da una dimensione punto a unità logiche.

Per altre informazioni su CFont, vedere Oggetti grafici.

Gerarchia di ereditarietà

CObject

CGdiObject

CFont

Requisiti

Intestazione: afxwin.h

CFont::CFont

Costruisce un oggetto CFont.

CFont();

Osservazioni:

L'oggetto risultante deve essere inizializzato con CreateFont, CreateFontIndirect, CreatePointFonto CreatePointFontIndirect prima di poterlo usare.

Esempio

CFont font;

CFont::CreateFont

Inizializza un CFont oggetto con le caratteristiche specificate.

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

Parametri

nHeight
Specifica l'altezza desiderata (in unità logiche) del tipo di carattere. Per una descrizione, vedere il lfHeight membro della LOGFONTstruttura in Windows SDK. Il valore assoluto di nHeight non deve superare 16.384 unità di dispositivo dopo la conversione. Per tutti i confronti di altezza, il mapper cerca il tipo di carattere più grande che non supera le dimensioni richieste o il tipo di carattere più piccolo se tutti i tipi di carattere superano le dimensioni richieste.

nWidth
Specifica la larghezza media (in unità logiche) di caratteri nel tipo di carattere. Se nWidth è 0, le proporzioni del dispositivo verranno confrontate con le proporzioni di digitalizzazione dei tipi di carattere disponibili per trovare la corrispondenza più vicina, determinata dal valore assoluto della differenza.

nEscapement
Specifica l'angolo , espresso in unità di misura di 0,1 gradi, tra il vettore di escape e l'asse x della superficie di visualizzazione. Il vettore di escape è la linea attraverso le origini del primo e dell'ultimo carattere su una riga. L'angolo viene misurato in senso antiorario dall'asse x. Per altre informazioni, vedere il lfEscapement membro nella LOGFONT struttura in Windows SDK.

nOrientation
Specifica l'angolo (in unità di 0,1 gradi) tra la linea di base di un carattere e l'asse x. L'angolo viene misurato in senso antiorario dall'asse x per i sistemi di coordinate in cui la direzione y è in basso e in senso orario dall'asse x per i sistemi di coordinate in cui la direzione y è rivolta verso l'alto.

nWeight
Specifica lo spessore del carattere (in pixel input penna per 1000). Per altre informazioni, vedere il lfWeight membro nella LOGFONT struttura in Windows SDK. I valori descritti sono approssimativi; l'aspetto effettivo dipende dal carattere tipografico. Alcuni tipi di carattere hanno solo FW_NORMALpesi , FW_REGULARe FW_BOLD . Se FW_DONTCARE viene specificato, viene utilizzato un peso predefinito.

bItalic
Specifica se il tipo di carattere è in corsivo.

bUnderline
Specifica se il tipo di carattere è sottolineato.

cStrikeOut
Specifica se i caratteri del tipo di carattere vengono evidenziati. Specifica un tipo di carattere barrato se impostato su un valore diverso da zero.

nCharSet
Specifica il set di caratteri del tipo di carattereVisualizza il lfCharSet membro nella LOGFONT struttura in Windows SDK per un elenco di valori.

Il set di caratteri OEM dipende dal sistema.

I tipi di carattere con altri set di caratteri possono esistere nel sistema. Un'applicazione che utilizza un tipo di carattere con un set di caratteri sconosciuto non deve tentare di tradurre o interpretare stringhe di cui eseguire il rendering con tale tipo di carattere. Le stringhe devono invece essere passate direttamente al driver di dispositivo di output.

Il mapper del tipo di carattere non usa il DEFAULT_CHARSET valore . Un'applicazione può utilizzare questo valore per consentire al nome e alle dimensioni di un tipo di carattere di descrivere completamente il tipo di carattere logico. Se non esiste un tipo di carattere con il nome specificato, un tipo di carattere di qualsiasi set di caratteri può essere sostituito con il tipo di carattere specificato. Per evitare risultati imprevisti, le applicazioni devono usare il DEFAULT_CHARSET valore con moderazione.

nOutPrecision
Specifica la precisione di output desiderata. La precisione di output definisce la precisione dell'output che deve corrispondere all'altezza, alla larghezza, all'orientamento dei caratteri, all'escape e all'inclinazione del tipo di carattere richiesto. Per un elenco di valori e altre informazioni, vedere il lfOutPrecision membro nella LOGFONT struttura in Windows SDK.

nClipPrecision
Specifica la precisione di ritaglio desiderata. La precisione di ritaglio definisce come ritagliare i caratteri parzialmente esterni all'area di ritaglio. Per un elenco di valori, vedere il lfClipPrecision membro nella LOGFONT struttura in Windows SDK.

Per usare un tipo di carattere di sola lettura incorporato, un'applicazione deve specificare CLIP_ENCAPSULATE.

Per ottenere una rotazione coerente dei tipi di carattere del dispositivo, TrueType e vector, un'applicazione può usare l'operatore OR bit per bit (|) per combinare il CLIP_LH_ANGLES valore con qualsiasi altro nClipPrecision valore. Se il CLIP_LH_ANGLES bit è impostato, la rotazione per tutti i tipi di carattere dipende dal fatto che l'orientamento del sistema di coordinate sia sinistrorso o destrorso. Per altre informazioni sull'orientamento dei sistemi di coordinate, vedere la descrizione del nOrientation parametro. Se CLIP_LH_ANGLES non è impostato, i tipi di carattere del dispositivo ruotano sempre in senso antiorario, ma la rotazione di altri tipi di carattere dipende dall'orientamento del sistema di coordinate.

nQuality
Specifica la qualità di output del tipo di carattere, che definisce con quale attenzione l'GDI deve tentare di associare gli attributi del tipo di carattere logico a quelli di un tipo di carattere fisico effettivo. Per un elenco di valori, vedere il lfQuality membro nella LOGFONT struttura in Windows SDK.

nPitchAndFamily
Specifica il passo e la famiglia del tipo di carattere. Per un elenco di valori e altre informazioni, vedere il lfPitchAndFamily membro nella LOGFONT struttura in Windows SDK.

lpszFacename
Oggetto CString o puntatore a una stringa con terminazione Null che specifica il nome del carattere tipografico del tipo di carattere. La lunghezza di questa stringa non deve superare i 30 caratteri. La funzione Windows EnumFontFamilies può essere usata per enumerare tutti i tipi di carattere attualmente disponibili. Se lpszFacename è NULL, GDI usa un carattere tipografico indipendente dal dispositivo.

Valore restituito

Diverso da zero se ha esito positivo; in caso contrario 0.

Osservazioni:

Il tipo di carattere può essere successivamente selezionato come tipo di carattere per qualsiasi contesto di dispositivo.

La CreateFont funzione non crea un nuovo tipo di carattere GDI di Windows. Seleziona semplicemente la corrispondenza più vicina dai tipi di carattere fisici disponibili per l'GDI.

Le applicazioni possono usare le impostazioni predefinite per la maggior parte dei parametri durante la creazione di un tipo di carattere logico. I parametri che devono essere sempre assegnati a valori specifici sono nHeight e lpszFacename. Se nHeight e lpszFacename non sono impostati dall'applicazione, il tipo di carattere logico creato è dipendente dal dispositivo.

Quando si termina con l'oggetto CFont creato dalla CreateFont funzione, usare CDC::SelectObject per selezionare un tipo di carattere diverso nel contesto del dispositivo, quindi eliminare l'oggetto CFont che non è più necessario.

Esempio

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

Inizializza un CFont oggetto con le caratteristiche fornite in una LOGFONTstruttura.

BOOL CreateFontIndirect(const LOGFONT* lpLogFont);

Parametri

lpLogFont
Punta a una LOGFONT struttura che definisce le caratteristiche del tipo di carattere logico.

Valore restituito

Diverso da zero se ha esito positivo; in caso contrario 0.

Osservazioni:

Il tipo di carattere può essere successivamente selezionato come tipo di carattere corrente per qualsiasi dispositivo.

Questo tipo di carattere presenta le caratteristiche specificate nella LOGFONT struttura. Quando il tipo di carattere viene selezionato utilizzando la CDC::SelectObject funzione membro, il mapper del tipo di carattere GDI tenta di associare il tipo di carattere logico a un tipo di carattere fisico esistente. Se il mapper del tipo di carattere non riesce a trovare una corrispondenza esatta per il tipo di carattere logico, fornisce un tipo di carattere alternativo le cui caratteristiche corrispondono al maggior numero possibile di caratteristiche richieste.

Quando l'oggetto CFont creato dalla CreateFontIndirect funzione non è più necessario, usare CDC::SelectObject per selezionare un tipo di carattere diverso nel contesto di dispositivo, quindi eliminare l'oggetto CFont non più necessario.

Esempio

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

Questa funzione consente di creare un tipo di carattere con un carattere tipografico e una dimensione punto specificati.

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

Parametri

nPointSize
Altezza del carattere richiesta in decimi di un punto. Ad esempio, passare 120 per richiedere un tipo di carattere a 12 punti.

lpszFaceName
Oggetto CString o puntatore a una stringa con terminazione Null che specifica il nome del carattere tipografico del tipo di carattere. La lunghezza di questa stringa non deve superare i 30 caratteri. La funzione Windows EnumFontFamilies può essere usata per enumerare tutti i tipi di carattere attualmente disponibili. Se lpszFaceName è NULL, GDI usa un carattere tipografico indipendente dal dispositivo.

pDC
Puntatore all'oggetto CDC da usare per convertire l'altezza in nPointSize unità logiche. Se NULL, per la conversione viene usato un contesto di dispositivo dello schermo.

Valore restituito

Diverso da zero se ha esito positivo; in caso contrario, 0.

Osservazioni:

Converte automaticamente l'altezza in nPointSize unità logiche usando l'oggetto CDC a pDCcui punta .

Al termine dell'operazione con l'oggetto CFont creato dalla CreatePointFont funzione, selezionare prima il tipo di carattere dal contesto del dispositivo, quindi eliminare l'oggetto CFont .

Esempio

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

Questa funzione è identica CreateFontIndirect a quella del fatto che il lfHeight membro di LOGFONT viene interpretato in decimi di un punto anziché in unità dispositivo.

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

Parametri

lpLogFont
Punta a una LOGFONT struttura che definisce le caratteristiche del tipo di carattere logico. Il lfHeight membro della LOGFONT struttura viene misurato in decimi di un punto anziché in unità logiche. Ad esempio, impostare su lfHeight 120 per richiedere un tipo di carattere a 12 punti.

pDC
Puntatore all'oggetto CDC da usare per convertire l'altezza in lfHeight unità logiche. Se NULL, per la conversione viene usato un contesto di dispositivo dello schermo.

Valore restituito

Diverso da zero se ha esito positivo; in caso contrario, 0.

Osservazioni:

Questa funzione converte automaticamente l'altezza in lfHeight unità logiche usando l'oggetto CDC a pDC cui punta prima di passare la LOGFONT struttura in Windows.

Al termine dell'operazione con l'oggetto CFont creato dalla CreatePointFontIndirect funzione, selezionare prima il tipo di carattere dal contesto del dispositivo, quindi eliminare l'oggetto CFont .

Esempio

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

Restituisce un puntatore a un CFont oggetto quando viene assegnato un HFONT handle a un oggetto carattere GDI di Windows.

static CFont* PASCAL FromHandle(HFONT hFont);

Parametri

hFont
Handle HFONT per un tipo di carattere di Windows.

Valore restituito

Puntatore a un CFont oggetto se ha esito positivo; in caso contrario NULL, .

Osservazioni:

Se un CFont oggetto non è già collegato all'handle, viene creato e collegato un oggetto temporaneo CFont . Questo oggetto temporaneo CFont è valido solo fino alla successiva volta che l'applicazione ha tempo di inattività nel ciclo di eventi, in cui vengono eliminati tutti gli oggetti grafici temporanei. Un altro modo per dire questo è che l'oggetto temporaneo è valido solo durante l'elaborazione di un messaggio di finestra.

Esempio

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

Chiamare questa funzione per recuperare una copia della LOGFONT struttura per CFont.

int GetLogFont(LOGFONT* pLogFont);

Parametri

pLogFont
Puntatore alla LOGFONT struttura per ricevere le informazioni sul tipo di carattere.

Valore restituito

Diverso da zero se la funzione ha esito positivo; in caso contrario, 0.

Esempio

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

Utilizzare questo operatore per ottenere l'handle GDI di Windows del tipo di carattere associato all'oggetto CFont .

operator HFONT() const;

Valore restituito

Handle dell'oggetto carattere GDI di Windows associato a CFont se ha esito positivo; in caso contrario NULL, .

Osservazioni:

Poiché questo operatore viene usato automaticamente per le conversioni da CFont a Tipi di carattere e testo, è possibile passare CFont oggetti a funzioni che prevedono HFONTs.

Per altre informazioni sull'uso di oggetti grafici, vedere Oggetti grafici in Windows SDK.

Esempio

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

Vedi anche

Esempio MFC HIERSVR
CGdiObject Classe
Grafico della gerarchia