Compartilhar via


Classe CFont

Encapsula uma fonte GDI (Graphics Device Interface) do Windows e fornece funções de membro para manipular a fonte.

Sintaxe

class CFont : public CGdiObject

Membros

Construtores públicos

Nome Descrição
CFont::CFont Constrói um objeto CFont.

Métodos públicos

Nome Descrição
CFont::CreateFont Inicializa um CFont com as características especificadas.
CFont::CreateFontIndirect Inicializa um objeto CFont com as características fornecidas em uma estrutura LOGFONT.
CFont::CreatePointFont Inicializa um CFont com a altura especificada, medido em décimos de ponto e typeface.
CFont::CreatePointFontIndirect O mesmo que CreateFontIndirect, exceto que a altura da fonte é medida em décimos de um ponto em vez de unidades lógicas.
CFont::FromHandle Quando um HFONT do Windows é fornecido, retorna um ponteiro para um objeto CFont.
CFont::GetLogFont Preenche um LOGFONT com informações sobre a fonte lógica anexada ao objeto CFont.

Operadores públicos

Nome Descrição
CFont::operator HFONT Retorna o identificador de fonte do Windows GDI anexado ao objeto CFont.

Comentários

Para usar um objeto CFont, construa um objeto CFont e anexe uma fonte do Windows a ele com CreateFont, CreateFontIndirect, CreatePointFont ou CreatePointFontIndirect e, em seguida, use as funções membro do objeto para manipular a fonte.

Geralmente, as funções CreatePointFont e CreatePointFontIndirect são mais fáceis de usar do que CreateFont ou CreateFontIndirect porque fazem automaticamente a conversão para a altura da fonte de um tamanho de ponto para unidades lógicas.

Para obter mais informações sobre CFont, confira Objetos Gráficos.

Hierarquia de herança

CObject

CGdiObject

CFont

Requisitos

Cabeçalhoafxwin.h:

CFont::CFont

Constrói um objeto CFont.

CFont();

Comentários

O objeto resultante precisa ser inicializado com CreateFont, CreateFontIndirect, CreatePointFont ou CreatePointFontIndirect antes de poder ser usado.

Exemplo

CFont font;

CFont::CreateFont

Inicializa um objeto CFont com as características especificadas.

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

Parâmetros

nHeight
Especifica a altura desejada (em unidades lógicas) da fonte. Confira o membro lfHeight da estrutura LOGFONT no SDK do Windows para obter uma descrição. O valor absoluto de nHeight não pode exceder 16.384 unidades de dispositivo depois de convertido. Para todas as comparações de altura, o mapeador de fonte procura a maior fonte que não excede o tamanho solicitado ou a menor fonte se todas as fontes excederem o tamanho solicitado.

nWidth
Especifica a largura média (em unidades lógicas) dos caracteres na fonte. Se nWidth for 0, a proporção do dispositivo será correspondida com a taxa de proporção de digitalização das fontes disponíveis para encontrar a correspondência mais próxima, que é determinada pelo valor absoluto da diferença.

nEscapement
Especifica o ângulo (em unidades de 0,1 grau) entre o vetor de escape e o eixo x da superfície de exibição. O vetor de escape é a linha por meio das origens dos primeiros e últimos caracteres em uma linha. O ângulo é medido no sentido anti-horário, partindo do eixo X. Para mais informações, confira o membro lfEscapement na estrutura LOGFONT no SDK do Windows.

nOrientation
Especifica o ângulo (em unidades de 0,1 grau) entre a linha de base de um caractere e o eixo x. O ângulo é medido no sentido anti-horário partindo do eixo x para sistemas de coordenadas nos quais a direção y está para baixo e no sentido horário partindo do eixo x para sistemas de coordenadas nos quais a direção y está para cima.

nWeight
Especifica o peso da fonte (em pixels pintados a cada 1.000). Para mais informações, confira o membro lfWeight na estrutura LOGFONT no SDK do Windows. Os valores descritos são aproximados; a aparência real depende da face de tipo. Algumas fontes têm apenas os pesos FW_NORMAL, FW_REGULAR e FW_BOLD. Se FW_DONTCARE for especificado, um peso padrão será usado.

bItalic
Especifica se a fonte é em itálico.

bUnderline
Especifica se a fonte está sublinhada.

cStrikeOut
Especifica se os caracteres na fonte são tachados. Especifica uma fonte tachada se definida como um valor diferente de zero.

nCharSet
Especifica o conjunto de caracteres da fonte. Confira o membro lfCharSet na estrutura LOGFONT no SDK do Windows para obter uma lista de valores.

O conjunto de caracteres OEM depende do sistema.

Fontes com outros conjuntos de caracteres podem existir no sistema. Um aplicativo que usa uma fonte com um conjunto de caracteres desconhecido não pode tentar traduzir ou interpretar cadeias de caracteres que devem ser renderizadas com essa fonte. Em vez disso, as cadeias de caracteres devem ser passadas diretamente para o driver do dispositivo de saída.

O mapeador de fontes não usa o valor DEFAULT_CHARSET. Um aplicativo pode usar esse valor para permitir que o nome e o tamanho de uma fonte descrevam totalmente a fonte lógica. Se uma fonte com o nome especificado não existir, uma fonte de qualquer conjunto de caracteres poderá ser substituída pela fonte especificada. Para evitar resultados inesperados, os aplicativos devem usar o valor DEFAULT_CHARSET com moderação.

nOutPrecision
Especifica a precisão de saída desejada. A precisão de saída define o quão próxima a saída precisa corresponder à altura, largura, orientação, escape e espaçamento entre caracteres da fonte solicitada. Confira o membro lfOutPrecision na estrutura LOGFONT no SDK do Windows para obter uma lista de valores e mais informações.

nClipPrecision
Especifica a precisão de recorte desejada. A precisão de recorte define como cortar caracteres que estão parcialmente fora da área de recorte. Confira o membro lfClipPrecision na estrutura LOGFONT no SDK do Windows para obter uma lista de valores.

Para usar uma fonte somente leitura inserida, um aplicativo precisa especificar CLIP_ENCAPSULATE.

Para obter uma rotação consistente de fontes de dispositivo, TrueType e vetoriais, um aplicativo pode usar o operador OR bit a bit (|) para combinar o valor CLIP_LH_ANGLES com qualquer um dos outros valores nClipPrecision. Se o bit de CLIP_LH_ANGLES estiver definido, a rotação para todas as fontes dependerá se a orientação do sistema de coordenadas é para a direita ou esquerda. (Para obter mais informações sobre a orientação dos sistemas de coordenadas, consulte a descrição do parâmetro nOrientation.) Se CLIP_LH_ANGLES não estiver definido, as fontes do dispositivo sempre girarão no sentido anti-horário, mas a rotação de outras fontes dependerá da orientação do sistema de coordenadas.

nQuality
Especifica a qualidade de saída da fonte, que define o nível de precisão com que o GDI deve tentar corresponder os atributos de fonte lógica aos de uma fonte física real. Confira o membro lfQuality na estrutura LOGFONT no SDK do Windows para obter uma lista de valores.

nPitchAndFamily
Especifica o espaçamento entre caracteres e a família da fonte. Confira o membro lfPitchAndFamily na estrutura LOGFONT no SDK do Windows para obter uma lista de valores e mais informações.

lpszFacename
Um CString ou ponteiro para uma cadeia de caracteres terminada em nulo que especifica o nome da face de tipo da fonte. O comprimento dessa cadeia de caracteres não pode exceder 30 caracteres. A função EnumFontFamilies do Windows pode ser usada para enumerar todas as fontes disponíveis no momento. Se lpszFacename é NULL, o GDI usa uma face de tipo independente do dispositivo.

Valor de Devolução

Diferente de zero se tiver êxito; caso contrário, 0.

Comentários

Posteriormente, a fonte pode ser selecionada como a fonte para qualquer contexto de dispositivo.

A função CreateFont não cria uma fonte de GDI do Windows. Ele simplesmente seleciona a correspondência mais próxima das fontes físicas disponíveis para o GDI.

Os aplicativos podem usar as configurações padrão para a maioria dos parâmetros ao criar uma fonte lógica. Os parâmetros que devem sempre receber valores específicos são nHeight e lpszFacename. Se nHeight e lpszFacename não forem definidos pelo aplicativo, a fonte lógica criada dependerá do dispositivo.

Quando você terminar a criação do objeto CFont por meio da função CreateFont, use CDC::SelectObject para selecionar uma fonte diferente no contexto do dispositivo e exclua o objeto CFont que não é mais necessário.

Exemplo

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

Inicializa um objeto CFont com as características fornecidas em uma estrutura LOGFONT.

BOOL CreateFontIndirect(const LOGFONT* lpLogFont);

Parâmetros

lpLogFont
Aponta para uma estrutura LOGFONT que define as características da fonte lógica.

Valor de Devolução

Diferente de zero se tiver êxito; caso contrário, 0.

Comentários

Posteriormente, a fonte pode ser selecionada como a fonte atual para qualquer dispositivo.

Essa fonte tem as características especificadas na estrutura LOGFONT. Quando a fonte é selecionada usando a função membro CDC::SelectObject, o mapeador de fonte GDI tenta corresponder a fonte lógica com uma fonte física existente. Se o mapeador de fontes não encontrar uma correspondência exata para a fonte lógica, ele fornecerá uma fonte alternativa cujas características correspondem ao maior número possível de características solicitadas.

Quando você não precisar mais criar o objeto CFont por meio da função CreateFontIndirect, use CDC::SelectObject para selecionar uma fonte diferente no contexto do dispositivo e exclua o objeto CFont que não é mais necessário.

Exemplo

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

Essa função fornece uma maneira simples de criar uma fonte de um tipo de face e tamanho de ponto especificados.

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

Parâmetros

nPointSize
Altura da fonte solicitada em décimos de ponto. (Por exemplo, passe 120 para solicitar uma fonte de 12 pontos.)

lpszFaceName
Um CString ou ponteiro para uma cadeia de caracteres terminada em nulo que especifica o nome da face de tipo da fonte. O comprimento dessa cadeia de caracteres não pode exceder 30 caracteres. A função EnumFontFamilies do Windows pode ser usada para enumerar todas as fontes disponíveis no momento. Se lpszFaceName é NULL, o GDI usa uma face de tipo independente do dispositivo.

pDC
Ponteiro para o objeto CDC a ser usado para converter a altura em nPointSize em unidades lógicas. Se NULL, um contexto de dispositivo de tela é usado para a conversão.

Valor de Devolução

Diferente de zero em caso de êxito; caso contrário, 0.

Comentários

Converte automaticamente a altura em nPointSize unidades lógicas usando o objeto CDC apontado por pDC.

Quando terminar com o objeto CFont criado pela função CreatePointFont, primeiro selecione a fonte fora do contexto do dispositivo e exclua o objeto CFont.

Exemplo

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

Essa função é a mesma CreateFontIndirect que, exceto que o membro lfHeight do LOGFONT é interpretado em décimos de um ponto em vez de unidades de dispositivo.

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

Parâmetros

lpLogFont
Aponta para uma estrutura LOGFONT que define as características da fonte lógica. O membro lfHeight da estrutura LOGFONT é medido em décimos de um ponto em vez de unidades lógicas. (Por exemplo, defina lfHeight para 120 para solicitar uma fonte de 12 pontos.)

pDC
Ponteiro para o objeto CDC a ser usado para converter a altura em lfHeight em unidades lógicas. Se NULL, um contexto de dispositivo de tela é usado para a conversão.

Valor de Devolução

Diferente de zero em caso de êxito; caso contrário, 0.

Comentários

Essa função converte automaticamente a altura em lfHeight em unidades lógicas usando o objeto CDC apontado por pDC antes de passar a estrutura LOGFONT para o Windows.

Quando terminar com o objeto CFont criado pela função CreatePointFontIndirect, primeiro selecione a fonte fora do contexto do dispositivo e exclua o objeto CFont.

Exemplo

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

Retorna um ponteiro para um objeto CFont quando dado um identificador HFONT para um objeto de fonte do GDI do Windows.

static CFont* PASCAL FromHandle(HFONT hFont);

Parâmetros

hFont
Um identificador HFONT para uma fonte do Windows.

Valor de Devolução

Um ponteiro para um objeto CFont se tiver êxito; caso contrário, NULL.

Comentários

Se um objeto CFont não estiver anexado ao identificador, um objeto temporário CFont será criado e anexado. Esse objeto temporário CFont é válido somente até a próxima vez que o aplicativo tiver tempo ocioso em seu loop de eventos, momento em que todos os objetos gráficos temporários são excluídos. Outra maneira de dizer isso é que o objeto temporário é válido somente durante o processamento de uma mensagem de janela.

Exemplo

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

Chame essa função para recuperar uma cópia da estrutura LOGFONT para CFont.

int GetLogFont(LOGFONT* pLogFont);

Parâmetros

pLogFont
Ponteiro para a LOGFONT estrutura para receber as informações da fonte.

Valor de Devolução

Diferente de zero se a função for bem-sucedida; caso contrário, 0.

Exemplo

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

Use esse operador para obter o identificador do GDI do Windows da fonte anexada ao objeto CFont.

operator HFONT() const;

Valor de Devolução

O identificador do objeto de fonte GDI do Windows anexado se CFont tiver êxito; caso contrário, NULL.

Comentários

Como esse operador é usado automaticamente para conversões de CFont em fontes e texto, você pode passar objetos CFont para funções que esperam HFONTs.

Para obter mais informações sobre como usar objetos gráficos, confira Objetos Gráficos no SDK do Windows.

Exemplo

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

Confira também

Exemplo de MFC HIERSVR
Classe CGdiObject
Gráfico da hierarquia