Função CreateFontW (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 CreateFontW(
[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] LPCWSTR 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 |
---|---|
|
O mapeador de fonte transforma esse valor em unidades de dispositivo e o corresponde à altura da célula das fontes disponíveis. |
|
O mapeador de fontes usa um valor de altura padrão quando pesquisa uma correspondência. |
|
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.
[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
- JOHAB_CHARSET
- ARABIC_CHARSET
- HEBREW_CHARSET
- THAI_CHARSET
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 face de tipo no parâmetro lpszFace , verifique se o valor fdwCharSet corresponde ao conjunto de caracteres da face de tipo especificado 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 do caractere, escape, tom e tipo de fonte da fonte solicitada. Pode ser um dos seguintes valores.
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 ele 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.
[in] iQuality
A qualidade da saída. A qualidade de saída define com que cuidado a GDI deve tentar corresponder os atributos de fonte lógica aos de uma fonte física real. Pode ser um dos seguintes valores.
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 no Painel de Controle. (A redação precisa da configuração no painel Controle depende da versão do Windows, mas serão palavras para o efeito de "Bordas suaves de fontes de tela".)
[in] iPitchAndFamily
O pitch e a família da fonte. Os dois bits de baixa ordem especificam a inclinação da fonte e podem ser um dos seguintes valores:
- DEFAULT_PITCH
- FIXED_PITCH
- VARIABLE_PITCH
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.
Valor retornado
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
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
Enumfontfamilies