Função CreateFontA (wingdi.h)

A função CreateFont cria uma fonte lógica com as características especificadas. A fonte lógica pode ser selecionada posteriormente como a fonte de qualquer dispositivo.

Sintaxe

HFONT CreateFontA(
  [in] int    cHeight,
  [in] int    cWidth,
  [in] int    cEscapement,
  [in] int    cOrientation,
  [in] int    cWeight,
  [in] DWORD  bItalic,
  [in] DWORD  bUnderline,
  [in] DWORD  bStrikeOut,
  [in] DWORD  iCharSet,
  [in] DWORD  iOutPrecision,
  [in] DWORD  iClipPrecision,
  [in] DWORD  iQuality,
  [in] DWORD  iPitchAndFamily,
  [in] LPCSTR pszFaceName
);

Parâmetros

[in] cHeight

A altura, em unidades lógicas, da célula ou do caractere do caractere da fonte. O valor de altura do caractere (também conhecido como altura em) é o valor de altura da célula do caractere menos o valor de liderança interna. O mapeador de fonte interpreta o valor especificado no nHeight da maneira a seguir.

Valor Significado
> 0
O mapeador de fonte transforma esse valor em unidades de dispositivo e o corresponde à altura da célula das fontes disponíveis.
0
O mapeador de fontes usa um valor de altura padrão quando pesquisa uma correspondência.
< 0
O mapeador de fonte transforma esse valor em unidades de dispositivo e corresponde ao seu valor absoluto em relação à altura do caractere das fontes disponíveis.
 

Para todas as comparações de altura, o mapeador de fonte procura a maior fonte que não excede o tamanho solicitado.

Esse mapeamento ocorre quando a fonte é usada pela primeira vez.

Para o modo de mapeamento MM_TEXT, você pode usar a seguinte fórmula para especificar uma altura para uma fonte com um tamanho de ponto especificado:


nHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);

[in] cWidth

A largura média, em unidades lógicas, de caracteres na fonte solicitada. Se esse valor for zero, o mapeador de fontes escolherá um valor de correspondência mais próximo. O valor de correspondência mais próximo é determinado comparando os valores absolutos da diferença entre a taxa de proporção do dispositivo atual e a taxa de proporção digitalizada das fontes disponíveis.

[in] cEscapement

O ângulo, em décimos de graus, entre o vetor de escape e o eixo x do dispositivo. O vetor de escape é paralelo à linha base de uma linha de texto.

Quando o modo gráfico é definido como GM_ADVANCED, você pode especificar o ângulo de escape da cadeia de caracteres independentemente do ângulo de orientação dos caracteres da cadeia de caracteres.

Quando o modo gráfico é definido como GM_COMPATIBLE, o nEscapement especifica o escape e a orientação. Você deve definir nEscapement e nOrientation com o mesmo valor.

[in] cOrientation

O ângulo, em décimos de graus, entre a linha base de cada caractere e o eixo x do dispositivo.

[in] cWeight

O peso da fonte no intervalo de 0 a 1000. Por exemplo, 400 é normal e 700 está em negrito. Se esse valor for zero, um peso padrão será usado.

Os valores a seguir são definidos para conveniência.

Peso Valor
FW_DONTCARE
0
FW_THIN
100
FW_EXTRALIGHT
200
FW_ULTRALIGHT
200
FW_LIGHT
300
FW_NORMAL
400
FW_REGULAR
400
FW_MEDIUM
500
FW_SEMIBOLD
600
FW_DEMIBOLD
600
FW_BOLD
700
FW_EXTRABOLD
800
FW_ULTRABOLD
800
FW_HEAVY
900
FW_BLACK
900

[in] bItalic

Especifica uma fonte itálica se definida como TRUE.

[in] bUnderline

Especifica uma fonte sublinhada se definida como TRUE.

[in] bStrikeOut

Uma fonte strikeout se definida como TRUE.

[in] iCharSet

O conjunto de caracteres. Os seguintes valores são predefinidos:

  • ANSI_CHARSET
  • BALTIC_CHARSET
  • CHINESEBIG5_CHARSET
  • DEFAULT_CHARSET
  • EASTEUROPE_CHARSET
  • GB2312_CHARSET
  • GREEK_CHARSET
  • HANGUL_CHARSET
  • MAC_CHARSET
  • OEM_CHARSET
  • RUSSIAN_CHARSET
  • SHIFTJIS_CHARSET
  • SYMBOL_CHARSET
  • TURKISH_CHARSET
  • VIETNAMESE_CHARSET
Edição em idioma coreano do Windows:
  • JOHAB_CHARSET
Edição de idioma do Oriente Médio do Windows:
  • ARABIC_CHARSET
  • HEBREW_CHARSET
Edição em idioma tailandês do Windows:
  • THAI_CHARSET
O valor OEM_CHARSET especifica um conjunto de caracteres dependente do sistema operacional.

DEFAULT_CHARSET é definido como um valor com base na localidade atual do sistema. Por exemplo, quando a localidade do sistema é inglês (Estados Unidos), ela é definida como ANSI_CHARSET.

Fontes com outros conjuntos de caracteres podem existir no sistema operacional. Se um aplicativo usa uma fonte com um conjunto de caracteres desconhecido, ele não deve tentar traduzir ou interpretar cadeias de caracteres que são renderizadas com essa fonte.

Para garantir resultados consistentes ao criar uma fonte, não especifique OEM_CHARSET ou DEFAULT_CHARSET. Se você especificar um nome de typeface no parâmetro lpszFace , verifique se o valor fdwCharSet corresponde ao conjunto de caracteres da face de tipo especificada em lpszFace.

[in] iOutPrecision

A precisão de saída. A precisão de saída define a proximidade com que a saída deve corresponder à altura, largura, orientação de caractere, escape, tom e tipo de fonte da fonte solicitada. Pode ser um dos seguintes valores.

Valor Significado
OUT_CHARACTER_PRECIS
Não usado.
OUT_DEFAULT_PRECIS
O comportamento padrão do mapeador de fontes.
OUT_DEVICE_PRECIS
Instrui o mapeador de fontes a escolher uma fonte de dispositivo quando o sistema contiver várias fontes com o mesmo nome.
OUT_OUTLINE_PRECIS
Esse valor instrui o mapeador de fontes a escolher entre TrueType e outras fontes baseadas em estrutura de tópicos.
OUT_PS_ONLY_PRECIS
Instrui o mapeador de fontes a escolher somente fontes PostScript. Se não houver fontes PostScript instaladas no sistema, o mapeador de fontes retornará ao comportamento padrão.
OUT_RASTER_PRECIS
Instrui o mapeador de fontes a escolher uma fonte de raster quando o sistema contiver várias fontes com o mesmo nome.
OUT_STRING_PRECIS
Esse valor não é usado pelo mapeador de fontes, mas é retornado quando fontes de raster são enumeradas.
OUT_STROKE_PRECIS
Esse valor não é usado pelo mapeador de fontes, mas é retornado quando TrueType, outras fontes baseadas em estrutura de tópicos e fontes vetoriais são enumeradas.
OUT_TT_ONLY_PRECIS
Instrui o mapeador de fontes a escolher somente as fontes TrueType. Se não houver fontes TrueType instaladas no sistema, o mapeador de fontes retornará ao comportamento padrão.
OUT_TT_PRECIS
Instrui o mapeador de fontes a escolher uma fonte TrueType quando o sistema contiver várias fontes com o mesmo nome.
 

Os aplicativos podem usar os valores OUT_DEVICE_PRECIS, OUT_RASTER_PRECIS, OUT_TT_PRECIS e OUT_PS_ONLY_PRECIS para controlar como o mapeador de fontes escolhe uma fonte quando o sistema operacional contém mais de uma fonte com um nome especificado. Por exemplo, se um sistema operacional contiver uma fonte chamada Symbol no formato raster e TrueType, especificar OUT_TT_PRECIS forçará o mapeador de fontes a escolher a versão TrueType. Especificar OUT_TT_ONLY_PRECIS força o mapeador de fontes a escolher uma fonte TrueType, mesmo que ela precise substituir uma fonte TrueType de outro nome.

[in] iClipPrecision

A precisão de recorte. A precisão de recorte define como cortar caracteres que estão parcialmente fora da área de recorte. Ela pode ser um ou mais dos seguintes valores.

Valor Significado
CLIP_CHARACTER_PRECIS
Não usado.
CLIP_DEFAULT_PRECIS
Especifica o comportamento de recorte padrão.
CLIP_DFA_DISABLE
Windows XP SP1: desativa a associação de fontes para a fonte. Observe que esse sinalizador não tem garantia de ter qualquer efeito em qualquer plataforma após o Windows Server 2003.
CLIP_EMBEDDED
Você deve especificar esse sinalizador para usar uma fonte somente leitura inserida.
CLIP_LH_ANGLES
Quando esse valor é usado, a rotação para todas as fontes depende se a orientação do sistema de coordenadas é canhoto ou destro.

Se não forem usadas, 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.

Para obter mais informações sobre a orientação dos sistemas de coordenadas, consulte a descrição do parâmetro nOrientation

CLIP_MASK
Não usado.
CLIP_DFA_OVERRIDE
Desativa a associação de fonte para a fonte. Isso é idêntico a CLIP_DFA_DISABLE, mas pode ter problemas em algumas situações; o sinalizador recomendado a ser usado é CLIP_DFA_DISABLE.
CLIP_STROKE_PRECIS
Não usado pelo mapeador de fontes, mas é retornado quando fontes raster, vector ou TrueType são enumeradas.

Para compatibilidade, esse valor sempre é retornado ao enumerar fontes.

CLIP_TT_ALWAYS
Não usado.

[in] iQuality

A qualidade da saída. A qualidade da saída define o quanto o GDI deve tentar corresponder os atributos de fonte lógica aos de uma fonte física real. Pode ser um dos seguintes valores.

Valor Significado
ANTIALIASED_QUALITY
A fonte será suavizada ou suavizada se a fonte der suporte a ela e o tamanho da fonte não for muito pequeno ou muito grande.
CLEARTYPE_QUALITY
Se definido, o texto será renderizado (quando possível) usando o método de suavização ClearType. Confira Comentários para obter mais informações.
DEFAULT_QUALITY
A aparência da fonte não importa.
DRAFT_QUALITY
A aparência da fonte é menos importante do que quando o valor de PROOF_QUALITY é usado. Para fontes de raster GDI, o dimensionamento está habilitado, o que significa que mais tamanhos de fonte estão disponíveis, mas a qualidade pode ser menor. As fontes negrito, itálico, sublinhado e strikeout são sintetizadas, se necessário.
NONANTIALIASED_QUALITY
A fonte nunca é suavizada, ou seja, a suavização da fonte não é feita.
PROOF_QUALITY
A qualidade do caractere da fonte é mais importante do que a correspondência exata dos atributos de fonte lógica. Para fontes de raster GDI, o dimensionamento é desabilitado e a fonte mais próxima do tamanho é escolhida. Embora o tamanho da fonte escolhida possa não ser mapeado exatamente quando PROOF_QUALITY é usado, a qualidade da fonte é alta e não há distorção de aparência. As fontes negrito, itálico, sublinhado e strikeout são sintetizadas, se necessário.
 

Se a qualidade de saída for DEFAULT_QUALITY, DRAFT_QUALITY ou PROOF_QUALITY, a fonte será suavizada se o parâmetro do sistema SPI_GETFONTSMOOTHING for TRUE. Os usuários podem controlar esse parâmetro do sistema do Painel de Controle. (A redação precisa da configuração no painel Controle depende da versão do Windows, mas serão palavras com o efeito de "Bordas suaves de fontes de tela".)

[in] iPitchAndFamily

O tom e a família da fonte. Os dois bits de baixa ordem especificam o tom da fonte e podem ser um dos seguintes valores:

  • DEFAULT_PITCH
  • FIXED_PITCH
  • VARIABLE_PITCH
Os quatro bits de alta ordem especificam a família de fontes e podem ser um dos valores a seguir.
Valor Significado
FF_DECORATIVE
Fontes de novidade. O inglês antigo é um exemplo.
FF_DONTCARE
Use a fonte padrão.
FF_MODERN
Fontes com largura de traço constante, com ou sem serifs. Pica, Elite e Courier New são exemplos.
FF_ROMAN
Fontes com largura de traço variável e com serifs. MS Serif é um exemplo.
FF_SCRIPT
Fontes projetadas para parecerem manuscritos. Script e Cursive são exemplos.
FF_SWISS
Fontes com largura de traço variável e sem serifs. MS? Sans Serif é um exemplo.
 

Um aplicativo pode especificar um valor para o parâmetro fdwPitchAndFamily usando o operador OR booliano para unir uma constante de tom com uma constante familiar.

Famílias de fontes descrevem a aparência de uma fonte de maneira geral. Elas são destinadas a especificar fontes quando a face de tipo exata solicitada não está disponível.

[in] pszFaceName

Um 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 deve exceder 32 caracteres, incluindo o caractere nulo de terminação. A função EnumFontFamilies pode ser usada para enumerar os nomes de face de tipo de todas as fontes disponíveis no momento. Para obter mais informações, consulte Comentários.

Se lpszFace for NULL ou cadeia de caracteres vazia, a GDI usará a primeira fonte que corresponde aos outros atributos especificados.

Retornar valor

Se a função for bem-sucedida, o valor retornado será um identificador para uma fonte lógica.

Se a função falhar, o valor retornado será NULL.

Comentários

Quando você não precisar mais da fonte, chame a função DeleteObject para excluí-la.

Para ajudar a proteger os direitos autorais dos fornecedores que fornecem fontes para o Windows, os aplicativos sempre devem relatar o nome exato de uma fonte selecionada. Como as fontes disponíveis podem variar de sistema para sistema, não suponha que a fonte selecionada seja sempre a mesma que a fonte solicitada. Por exemplo, se você solicitar uma fonte chamada Palatino, mas essa fonte não estiver disponível no sistema, o mapeador de fonte substituirá uma fonte que tenha atributos semelhantes, mas um nome diferente. Sempre relate o nome da fonte selecionada para o usuário.

Para obter a fonte apropriada em diferentes versões de idioma do sistema operacional, chame EnumFontFamiliesEx com as características de fonte desejadas na estrutura LOGFONT e recupere o nome de face de tipo apropriado e crie a fonte usando CreateFont ou CreateFontIndirect.

O mapeador de fontes para CreateFont, CreateFontIndirect e CreateFontIndirectEx reconhece o nome da face de tipo em inglês e localizado, independentemente da localidade.

As seguintes situações não dão suporte à suavização ClearType:

  • Texto renderizado em uma impressora.
  • Um conjunto de exibição para 256 cores ou menos.
  • Texto renderizado para um cliente de servidor de terminal.
  • A fonte não é uma fonte TrueType ou uma fonte OpenType com estruturas de tópicos TrueType. Por exemplo, o seguinte não dá suporte à suavização ClearType: fontes tipo 1, fontes OpenType Postscript sem estruturas de tópicos TrueType, fontes de bitmap, fontes de vetor e fontes de dispositivo.
  • A fonte ajustou bitmaps inseridos, somente para os tamanhos de fonte que contêm os bitmaps inseridos. Por exemplo, isso ocorre normalmente em fontes do Leste Asiático.

Exemplos

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    switch (message)
    {
    
    
    case WM_PAINT:
        {
        RECT rect;
        HFONT hFontOriginal, hFont1, hFont2, hFont3;
        hdc = BeginPaint(hWnd, &ps);

            
            //Logical units are device dependent pixels, so this will create a handle to a logical font that is 48 pixels in height.
            //The width, when set to 0, will cause the font mapper to choose the closest matching value.
            //The font face name will be Impact.
            hFont1 = CreateFont(48,0,0,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
                CLIP_DEFAULT_PRECIS,CLEARTYPE_QUALITY, VARIABLE_PITCH,TEXT("Impact"));
            hFontOriginal = (HFONT)SelectObject(hdc, hFont1);
            
            //Sets the coordinates for the rectangle in which the text is to be formatted.
            SetRect(&rect, 100,100,700,200);
            SetTextColor(hdc, RGB(255,0,0));
            DrawText(hdc, TEXT("Drawing Text with Impact"), -1,&rect, DT_NOCLIP);
            
            //Logical units are device dependent pixels, so this will create a handle to a logical font that is 36 pixels in height.
            //The width, when set to 20, will cause the font mapper to choose a font which, in this case, is stretched.
            //The font face name will be Times New Roman.  This time nEscapement is at -300 tenths of a degree (-30 degrees)
            hFont2 = CreateFont(36,20,-300,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
                CLIP_DEFAULT_PRECIS,CLEARTYPE_QUALITY, VARIABLE_PITCH,TEXT("Times New Roman"));
            SelectObject(hdc,hFont2);
            
            //Sets the coordinates for the rectangle in which the text is to be formatted.
            SetRect(&rect, 100, 200, 900, 800);
            SetTextColor(hdc, RGB(0,128,0));
            DrawText(hdc, TEXT("Drawing Text with Times New Roman"), -1,&rect, DT_NOCLIP);
                
            //Logical units are device dependent pixels, so this will create a handle to a logical font that is 36 pixels in height.
            //The width, when set to 10, will cause the font mapper to choose a font which, in this case, is compressed. 
            //The font face name will be Arial. This time nEscapement is at 250 tenths of a degree (25 degrees)
            hFont3 = CreateFont(36,10,250,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
                CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY, VARIABLE_PITCH,TEXT("Arial"));
            SelectObject(hdc,hFont3);

            //Sets the coordinates for the rectangle in which the text is to be formatted.
            SetRect(&rect, 500, 200, 1400, 600);
            SetTextColor(hdc, RGB(0,0,255));
            DrawText(hdc, TEXT("Drawing Text with Arial"), -1,&rect, DT_NOCLIP);

            SelectObject(hdc,hFontOriginal);
            DeleteObject(hFont1);
            DeleteObject(hFont2);
            DeleteObject(hFont3);
        
        EndPaint(hWnd, &ps);
        break;
        }
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

Para obter outro exemplo, confira "Configurando fontes para Menu-Item cadeias de caracteres de texto" em Usando menus.

Observação

O cabeçalho wingdi.h define CreateFont como um alias que seleciona automaticamente a versão ANSI ou Unicode dessa função com base na definição da constante de pré-processador UNICODE. Misturar o uso do alias neutro de codificação com código que não seja neutro em codificação pode levar a incompatibilidades que resultam em erros de compilação ou de runtime. Para obter mais informações, consulte Convenções para protótipos de função.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho wingdi.h (inclua Windows.h)
Biblioteca Gdi32.lib
DLL Gdi32.dll

Confira também

Createfontindirect

CreateFontIndirectEx

DeleteObject

Enumfontfamilies

Enumfontfamiliesex

Enumfonts

Funções de fonte e texto

Visão geral de fontes e texto

LOGFONT

Selectobject