Función CreateFontA (wingdi.h)

La función CreateFont crea una fuente lógica con las características especificadas. La fuente lógica se puede seleccionar posteriormente como fuente para cualquier dispositivo.

Sintaxis

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

Alto, en unidades lógicas, de la celda o carácter de carácter de la fuente. El valor de alto de caracteres (también conocido como alto em) es el valor de alto de celda de caracteres menos el valor inicial interno. El asignador de fuentes interpreta el valor especificado en nHeight de la siguiente manera.

Valor Significado
> 0
El asignador de fuentes transforma este valor en unidades de dispositivo y lo coincide con el alto de celda de las fuentes disponibles.
0
El asignador de fuentes usa un valor de alto predeterminado cuando busca una coincidencia.
< 0
El asignador de fuentes transforma este valor en unidades de dispositivo y coincide con su valor absoluto con el alto de caracteres de las fuentes disponibles.
 

Para todas las comparaciones de alto, el asignador de fuentes busca la fuente más grande que no supera el tamaño solicitado.

Esta asignación se produce cuando la fuente se usa por primera vez.

Para el modo de asignación de MM_TEXT, puede usar la fórmula siguiente para especificar un alto para una fuente con un tamaño de punto especificado:


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

[in] cWidth

Ancho medio, en unidades lógicas, de caracteres en la fuente solicitada. Si este valor es cero, el asignador de fuentes elige un valor de coincidencia más cercano. El valor de coincidencia más cercano se determina comparando los valores absolutos de la diferencia entre la relación de aspecto del dispositivo actual y la relación de aspecto digitalizada de las fuentes disponibles.

[in] cEscapement

Ángulo, en décimos grados, entre el vector de escape y el eje X del dispositivo. El vector de escape es paralelo a la línea base de una fila de texto.

Cuando el modo gráfico se establece en GM_ADVANCED, puede especificar el ángulo de escape de la cadena independientemente del ángulo de orientación de los caracteres de la cadena.

Cuando el modo gráfico se establece en GM_COMPATIBLE, nEscapement especifica el escape y la orientación. Debe establecer nEscapement y nOrientation en el mismo valor.

[in] cOrientation

Ángulo, en décimos grados, entre la línea base de cada carácter y el eje x del dispositivo.

[in] cWeight

Peso de la fuente del intervalo de 0 a 1000. Por ejemplo, 400 es normal y 700 es negrita. Si este valor es cero, se usa un peso predeterminado.

Los valores siguientes se definen para mayor comodidad.

Peso Value
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 una fuente en cursiva si se establece en TRUE.

[in] bUnderline

Especifica una fuente subrayada si se establece en TRUE.

[in] bStrikeOut

Fuente de tachado si se establece en TRUE.

[in] iCharSet

El conjunto de caracteres. Los siguientes valores están 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
Edición en coreano de Windows:
  • JOHAB_CHARSET
Edición de idioma de Oriente Medio de Windows:
  • ARABIC_CHARSET
  • HEBREW_CHARSET
Edición tailandesa de Windows:
  • THAI_CHARSET
El valor OEM_CHARSET especifica un juego de caracteres dependiente del sistema operativo.

DEFAULT_CHARSET se establece en un valor basado en la configuración regional del sistema actual. Por ejemplo, cuando la configuración regional del sistema es inglés (Estados Unidos), se establece como ANSI_CHARSET.

Las fuentes con otros juegos de caracteres pueden existir en el sistema operativo. Si una aplicación usa una fuente con un juego de caracteres desconocido, no debe intentar traducir ni interpretar cadenas que se representan con esa fuente.

Para garantizar resultados coherentes al crear una fuente, no especifique OEM_CHARSET ni DEFAULT_CHARSET. Si especifica un nombre de tipo de letra en el parámetro lpszFace , asegúrese de que el valor fdwCharSet coincide con el juego de caracteres del tipo de letra especificado en lpszFace.

[in] iOutPrecision

Precisión de salida. La precisión de salida define la estrecha precisión de la salida que debe coincidir con el alto, el ancho, la orientación de caracteres, el escape, el tono y el tipo de fuente solicitados. Puede ser uno de los siguientes valores.

Value Significado
OUT_CHARACTER_PRECIS
No se usa.
OUT_DEFAULT_PRECIS
Comportamiento predeterminado del asignador de fuentes.
OUT_DEVICE_PRECIS
Indica al asignador de fuentes que elija una fuente device cuando el sistema contenga varias fuentes con el mismo nombre.
OUT_OUTLINE_PRECIS
Este valor indica al asignador de fuentes que elija entre TrueType y otras fuentes basadas en esquemas.
OUT_PS_ONLY_PRECIS
Indica al asignador de fuentes que elija solo entre las fuentes PostScript. Si no hay fuentes PostScript instaladas en el sistema, el asignador de fuentes vuelve al comportamiento predeterminado.
OUT_RASTER_PRECIS
Indica al asignador de fuentes que elija una fuente ráster cuando el sistema contenga varias fuentes con el mismo nombre.
OUT_STRING_PRECIS
El asignador de fuentes no usa este valor, pero se devuelve cuando se enumeran las fuentes ráster.
OUT_STROKE_PRECIS
El asignador de fuentes no usa este valor, pero se devuelve cuando se enumeran TrueType, otras fuentes basadas en esquemas y fuentes vectoriales.
OUT_TT_ONLY_PRECIS
Indica al asignador de fuentes que elija solo entre las fuentes TrueType. Si no hay fuentes TrueType instaladas en el sistema, el asignador de fuentes vuelve al comportamiento predeterminado.
OUT_TT_PRECIS
Indica al asignador de fuentes que elija una fuente TrueType cuando el sistema contenga varias fuentes con el mismo nombre.
 

Las aplicaciones pueden usar los valores OUT_DEVICE_PRECIS, OUT_RASTER_PRECIS, OUT_TT_PRECIS y OUT_PS_ONLY_PRECIS para controlar cómo elige el asignador de fuentes una fuente cuando el sistema operativo contiene más de una fuente con un nombre especificado. Por ejemplo, si un sistema operativo contiene una fuente denominada Symbol en formato raster y TrueType, especificar OUT_TT_PRECIS obliga al asignador de fuentes a elegir la versión TrueType. Especificar OUT_TT_ONLY_PRECIS obliga al asignador de fuentes a elegir una fuente TrueType, incluso si debe sustituir una fuente TrueType de otro nombre.

[in] iClipPrecision

Precisión de recorte. La precisión de recorte define cómo recortar caracteres que están parcialmente fuera de la zona de recorte. Este puede ser uno o varios de los valores siguientes.

Valor Significado
CLIP_CHARACTER_PRECIS
No se usa.
CLIP_DEFAULT_PRECIS
Especifica el comportamiento de recorte predeterminado.
CLIP_DFA_DISABLE
Windows XP SP1: desactiva la asociación de fuentes para la fuente. Tenga en cuenta que no se garantiza que esta marca tenga ningún efecto en ninguna plataforma después de Windows Server 2003.
CLIP_EMBEDDED
Debe especificar esta marca para usar una fuente de solo lectura incrustada.
CLIP_LH_ANGLES
Cuando se usa este valor, la rotación de todas las fuentes depende de si la orientación del sistema de coordenadas es de izquierda o derecha.

Si no se usa, las fuentes del dispositivo siempre giran en sentido contrario a las agujas del reloj, pero la rotación de otras fuentes depende de la orientación del sistema de coordenadas.

Para obtener más información sobre la orientación de los sistemas de coordenadas, vea la descripción del parámetro nOrientation .

CLIP_MASK
No se usa.
CLIP_DFA_OVERRIDE
Desactiva la asociación de fuentes para la fuente. Esto es idéntico a CLIP_DFA_DISABLE, pero puede tener problemas en algunas situaciones; la marca recomendada que se va a usar es CLIP_DFA_DISABLE.
CLIP_STROKE_PRECIS
No se usa en el asignador de fuentes, pero se devuelve cuando se enumeran las fuentes raster, vector o TrueType.

Por motivos de compatibilidad, este valor siempre se devuelve al enumerar fuentes.

CLIP_TT_ALWAYS
No se usa.

[in] iQuality

Calidad de salida. La calidad de salida define cómo GDI cuidadosamente debe intentar coincidir con los atributos de fuente lógica con los de una fuente física real. Puede ser uno de los siguientes valores.

Value Significado
ANTIALIASED_QUALITY
La fuente está suavizada o suavizada si la fuente lo admite y el tamaño de la fuente no es demasiado pequeño o demasiado grande.
CLEARTYPE_QUALITY
Si se establece, el texto se representa (siempre que sea posible) mediante el método antialiasing ClearType. Vea Comentarios para obtener más información.
DEFAULT_QUALITY
La apariencia de la fuente no importa.
DRAFT_QUALITY
La apariencia de la fuente es menos importante que cuando se usa el valor de PROOF_QUALITY. En el caso de las fuentes de trama GDI, el escalado está habilitado, lo que significa que hay más tamaños de fuente disponibles, pero la calidad puede ser inferior. Las fuentes negrita, cursiva, subrayado y tachado se sintetizan, si es necesario.
NONANTIALIASED_QUALITY
La fuente nunca se suaviza, es decir, no se realiza el suavizado de fuentes.
PROOF_QUALITY
La calidad del carácter de la fuente es más importante que la coincidencia exacta de los atributos de fuente lógica. En el caso de las fuentes de trama GDI, el escalado está deshabilitado y se elige la fuente más cercana en tamaño. Aunque es posible que el tamaño de fuente elegido no se asigne exactamente cuando se usa PROOF_QUALITY, la calidad de la fuente es alta y no hay distorsión de apariencia. Las fuentes negrita, cursiva, subrayado y tachado se sintetizan, si es necesario.
 

Si la calidad de salida es DEFAULT_QUALITY, DRAFT_QUALITY o PROOF_QUALITY, la fuente se suaviza si el parámetro del sistema de SPI_GETFONTSMOOTHING es TRUE. Los usuarios pueden controlar este parámetro del sistema desde el Panel de control. (La redacción precisa de la configuración en el panel de control depende de la versión de Windows, pero será palabras para el efecto de "Bordes suaves de fuentes de pantalla").

[in] iPitchAndFamily

Tono y familia de la fuente. Los dos bits de orden bajo especifican el tono de la fuente y pueden ser uno de los siguientes valores:

  • DEFAULT_PITCH
  • FIXED_PITCH
  • VARIABLE_PITCH
Los cuatro bits de orden superior especifican la familia de fuentes y pueden ser uno de los siguientes valores.
Valor Significado
FF_DECORATIVE
Fuentes novedades. Old English es un ejemplo.
FF_DONTCARE
Use la fuente predeterminada.
FF_MODERN
Fuentes con ancho de trazo constante, con o sin serifos. Pica, Elite y Courier New son ejemplos.
FF_ROMAN
Fuentes con ancho de trazo variable y con serifas. MS Serif es un ejemplo.
FF_SCRIPT
Fuentes diseñadas para tener un aspecto similar a la escritura a mano. Script y cursiva son ejemplos.
FF_SWISS
Fuentes con ancho de trazo variable y sin serifas. ¿SRA? Sans Serif es un ejemplo.
 

Una aplicación puede especificar un valor para el parámetro fdwPitchAndFamily mediante el operador OR booleano para unir una constante de tono con una constante familiar.

Las familias de fuentes describen el aspecto de una fuente de una manera general. Están diseñados para especificar fuentes cuando el tipo de letra exacto solicitado no está disponible.

[in] pszFaceName

Puntero a una cadena terminada en null que especifica el nombre del tipo de letra de la fuente. La longitud de esta cadena no debe superar los 32 caracteres, incluido el carácter nulo de terminación. La función EnumFontFamilies se puede usar para enumerar los nombres de letras de todas las fuentes disponibles actualmente. Para obtener más información, vea la sección Notas.

Si lpszFace es NULL o una cadena vacía, GDI usa la primera fuente que coincide con los demás atributos especificados.

Valor devuelto

Si la función se ejecuta correctamente, el valor devuelto es un identificador de una fuente lógica.

Si la función no se realiza correctamente, el valor devuelto es NULL.

Comentarios

Cuando ya no necesite la fuente, llame a la función DeleteObject para eliminarla.

Para ayudar a proteger los derechos de autor de los proveedores que proporcionan fuentes para Windows, las aplicaciones siempre deben notificar el nombre exacto de una fuente seleccionada. Dado que las fuentes disponibles pueden variar de sistema a sistema, no supongamos que la fuente seleccionada siempre es la misma que la solicitada. Por ejemplo, si solicita una fuente denominada Palatino, pero no hay ninguna fuente disponible en el sistema, el asignador de fuentes sustituirá una fuente que tenga atributos similares, pero un nombre diferente. Informe siempre del nombre de la fuente seleccionada al usuario.

Para obtener la fuente adecuada en diferentes versiones de idioma del sistema operativo, llame a EnumFontFamiliesEx con las características de fuente deseadas en la estructura LOGFONT y, a continuación, recupere el nombre de tipo de letra adecuado y cree la fuente mediante CreateFont o CreateFontIndirect.

El asignador de fuentes para CreateFont,CreateFontIndirect y CreateFontIndirectEx reconoce tanto el inglés como el nombre del tipo de letra localizado, independientemente de la configuración regional.

Las situaciones siguientes no admiten el suavizado de contorno ClearType:

  • Texto representado en una impresora.
  • Un conjunto de visualización para 256 colores o menos.
  • Texto representado en un cliente de terminal Server.
  • La fuente no es una fuente TrueType ni una fuente OpenType con esquemas TrueType. Por ejemplo, lo siguiente no admite el suavizado clearType: fuentes de tipo 1, fuentes OpenType postscript sin esquemas TrueType, fuentes de mapa de bits, fuentes vectoriales y fuentes de dispositivo.
  • La fuente tiene mapas de bits incrustados ajustados, solo para los tamaños de fuente que contienen los mapas de bits incrustados. Por ejemplo, esto ocurre normalmente en fuentes del Este asiático.

Ejemplos

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 obtener otro ejemplo, vea "Establecer fuentes para Menu-Item cadenas de texto" en Usar menús.

Nota

El encabezado wingdi.h define CreateFont como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutro de codificación con código que no es neutral de codificación puede provocar discrepancias que dan lugar a errores de compilación o en tiempo de ejecución. Para obtener más información, vea Convenciones para prototipos de función.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado wingdi.h (incluye Windows.h)
Library Gdi32.lib
Archivo DLL Gdi32.dll

Consulte también

CreateFontIndirect

CreateFontIndirectEx

DeleteObject

EnumFontFamilies

EnumFontFamiliesEx

EnumFonts

Funciones de fuente y texto

Información general sobre fuentes y texto

LOGFONT

SelectObject