Clase CFont

Encapsula una fuente de la Interfaz de dispositivo gráfico (GDI) de Windows y proporciona funciones miembro para manipular la fuente.

Sintaxis

class CFont : public CGdiObject

Miembros

Constructores públicos

Nombre Descripción
CFont::CFont Construye un objeto CFont.

Métodos públicos

Nombre Descripción
CFont::CreateFont Inicializa un objeto CFont con las características especificadas.
CFont::CreateFontIndirect Inicializa un objeto CFont con las características dadas en una estructura LOGFONT.
CFont::CreatePointFont Inicializa un objeto CFont con el alto especificado, medido en décimas de un punto y un tipo de letra.
CFont::CreatePointFontIndirect Igual que CreateFontIndirect, salvo que el alto de la fuente se mide en décimas de punto en lugar de unidades lógicas.
CFont::FromHandle Devuelve un puntero a un objeto CFont cuando se proporciona un objeto HFONT de Windows.
CFont::GetLogFont Rellena un objeto LOGFONT con información sobre la fuente lógica asociada al objeto CFont.

Operadores públicos

Nombre Descripción
CFont::operator HFONT Devuelve el identificador de fuente GDI de Windows asociado al objeto CFont.

Comentarios

Para usar un objeto CFont, construya un objeto CFont y asóciele una fuente de Windows con CreateFont, CreateFontIndirect, CreatePointFont o CreatePointFontIndirect, luego, use las funciones miembro del objeto para manipular la fuente.

Las funciones CreatePointFont y CreatePointFontIndirect suelen ser más fáciles de usar que CreateFont o CreateFontIndirect porque realizan la conversión del alto de la fuente de un tamaño de punto a unidades lógicas automáticamente.

Para más información sobre la clase CFont, consulte Objetos gráficos.

Jerarquía de herencia

CObject

CGdiObject

CFont

Requisitos

Encabezadoafxwin.h:

CFont::CFont

Construye un objeto CFont.

CFont();

Comentarios

El objeto resultante debe inicializarse con CreateFont, CreateFontIndirect, CreatePointFont o CreatePointFontIndirect antes de poder usarse.

Ejemplo

CFont font;

CFont::CreateFont

Inicializa un objeto CFont con las 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 el alto deseado (en unidades lógicas) de la fuente. Consulte el miembro lfHeight de la estructura LOGFONT en Windows SDK para ver una descripción. El valor absoluto de nHeight no debe superar 16 384 unidades de dispositivo después de convertirlo. Para todas las comparaciones de alto, el asignador de fuentes busca la fuente más grande que no supere el tamaño solicitado o la fuente más pequeña si todas las fuentes superan el tamaño solicitado.

nWidth
Especifica el ancho medio, en unidades lógicas, de caracteres de la fuente. Si nWidth es 0, se hará coincidir la relación de aspecto del dispositivo con la relación de aspecto de digitalización de las fuentes disponibles para encontrar la coincidencia más cercana, que viene determinada por el valor absoluto de la diferencia.

nEscapement
Especifica el ángulo (en unidades de 0,1 grados) entre el vector de escape y el eje x de la superficie de visualización. El vector de escape es la línea que pasa por los orígenes de los caracteres primero y último de una línea. El ángulo se mide en grados en sentido contrario a las agujas del reloj desde el eje x. Para más información, consulte el miembro lfEscapement de la estructura LOGFONT en Windows SDK.

nOrientation
Especifica el ángulo (en unidades de 0,1 grados) entre la línea base de un carácter y el eje x. El ángulo se mide en sentido contrario a las agujas del reloj desde el eje x en los sistemas de coordenadas en los que la dirección y está hacia abajo y hacia el sentido de las agujas del reloj desde el eje X en los sistemas de coordenadas en los que la dirección y está hacia arriba.

nWeight
Especifica el peso de la fuente (en píxeles con entrada manuscrita por 1000). Para más información, consulte el miembro lfWeight de la estructura LOGFONT en Windows SDK. Los valores descritos son aproximados; la apariencia real depende del tipo de letra. Algunas fuentes solo tienen pesos FW_NORMAL, FW_REGULAR y FW_BOLD. Si se especifica FW_DONTCARE, se usa un peso predeterminado.

bItalic
Especifica si la fuente está en cursiva.

bUnderline
Especifica si la fuente está subrayada.

cStrikeOut
Especifica si los caracteres de la fuente se tachan. Especifica una fuente tachada si se establece en un valor distinto de cero.

nCharSet
Especifica el juego de caracteres de la fuente. Consulte el miembro lfCharSet de la estructura LOGFONT de Windows SDK para ver una lista de valores.

El juego de caracteres OEM depende del sistema.

Pueden existir fuentes con otros juegos de caracteres en el sistema. Una aplicación que use una fuente con un juego de caracteres desconocido no debe intentar traducir ni interpretar cadenas que se vayan a representar con esa fuente. En su lugar, las cadenas se deben pasar directamente al controlador del dispositivo de salida.

El asignador de fuentes no usa el valor DEFAULT_CHARSET. Una aplicación puede usar este valor para permitir que el nombre y el tamaño de una fuente describa completamente la fuente lógica. Si no existe una fuente con el nombre especificado, se puede sustituir una fuente de cualquier juego de caracteres por la fuente especificada. Para evitar resultados inesperados, las aplicaciones deben usar el valor DEFAULT_CHARSET con moderación.

nOutPrecision
Especifica la precisión de salida deseada. La precisión de la salida define el grado de coincidencia con el alto, el ancho y la orientación de los caracteres, y con el escape y el tono de la fuente solicitada. Consulte el miembro lfOutPrecision de la estructura LOGFONT en Windows SDK para ver una lista de valores y más información.

nClipPrecision
Especifica la precisión de recorte deseada. La precisión de recorte define cómo recortar caracteres que están parcialmente fuera de la zona de recorte. Consulte el miembro lfClipPrecision de la estructura LOGFONT en Windows SDK para ver una lista de valores.

Para usar una fuente de solo lectura insertada, una aplicación debe especificar CLIP_ENCAPSULATE.

Para lograr una rotación coherente de las fuentes de dispositivo, TrueType y vectoriales, una aplicación puede usar el operador OR bit a bit (|) para combinar el valor CLIP_LH_ANGLES con cualquiera de los demás valores nClipPrecision. Si se establece el bit CLIP_LH_ANGLES, la rotación de todas las fuentes depende de si la orientación del sistema de coordenadas es a la izquierda o a la derecha. (Para más información sobre la orientación de los sistemas de coordenadas, consulte la descripción del parámetro nOrientation). Si CLIP_LH_ANGLES no se establece, las fuentes de dispositivo siempre rotan en sentido contrario a las agujas del reloj, pero la rotación de otras fuentes depende de la orientación del sistema de coordenadas.

nQuality
Especifica la calidad de salida de la fuente, que define el cuidado con el que la GDI debe intentar hacer coincidir los atributos de la fuente lógica con los de una fuente física real. Consulte el miembro lfQuality de la estructura LOGFONT en Windows SDK para ver una lista de valores.

nPitchAndFamily
Especifica el tono y la familia de la fuente. Consulte el miembro lfPitchAndFamily de la estructura LOGFONT en Windows SDK para ver una lista de valores y más información.

lpszFacename
Objeto CString o puntero a una cadena terminada en NULL que especifica el nombre del tipo de letra de la fuente. La longitud de la cadena no debe exceder los 30 caracteres. La función EnumFontFamilies de Windows se puede usar para enumerar todas las fuentes disponibles actualmente. Si lpszFacename es NULL, la GDI usa un tipo de letra independiente del dispositivo.

Valor devuelto

Si es correcta, su valor es distinto de cero. En caso contrario, es cero.

Comentarios

La fuente se puede seleccionar posteriormente como fuente para cualquier contexto de dispositivo.

La función CreateFont no crea una nueva fuente de GDI de Windows. Simplemente selecciona la coincidencia más cercana de las fuentes físicas disponibles para la GDI.

Las aplicaciones pueden usar la configuración predeterminada de la mayoría de los parámetros al crear una fuente lógica. Los parámetros a los que siempre se deben proporcionar valores específicos son nHeight y lpszFacename. Si la aplicación no establece nHeight y lpszFacename, la fuente lógica que se crea depende del dispositivo.

Cuando termine con el objeto CFont creado por la función CreateFont, use CDC::SelectObject para seleccionar una fuente diferente en el contexto del dispositivo y, luego, elimine el objeto CFont que ya no es necesario.

Ejemplo

// 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 un objeto CFont con las características dadas en una estructura LOGFONT.

BOOL CreateFontIndirect(const LOGFONT* lpLogFont);

Parámetros

lpLogFont
Apunta a una estructura LOGFONT que define las características de la fuente lógica.

Valor devuelto

Si es correcta, su valor es distinto de cero. En caso contrario, es cero.

Comentarios

La fuente se puede seleccionar posteriormente como fuente actual para cualquier dispositivo.

Esta fuente tiene las características especificadas en la estructura LOGFONT. Cuando la fuente se selecciona mediante la función miembro CDC::SelectObject, el asignador de fuentes de GDI intenta hacer coincidir la fuente lógica con una fuente física existente. Si el asignador de fuentes no encuentra una coincidencia exacta para la fuente lógica, proporciona una fuente alternativa cuyas características coinciden lo más posible con las características solicitadas.

Cuando ya no necesite el objeto CFont creado por la función CreateFontIndirect, use CDC::SelectObject para seleccionar una fuente diferente en el contexto del dispositivo y, luego, elimine el objeto CFont que ya no es necesario.

Ejemplo

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

Esta función proporciona una manera sencilla de crear una fuente de un tipo de letra y un tamaño de punto especificados.

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

Parámetros

nPointSize
Alto de fuente solicitado en décimas de un punto. (Por ejemplo, pase 120 para solicitar una fuente de 12 puntos).

lpszFaceName
Objeto CString o puntero a una cadena terminada en NULL que especifica el nombre del tipo de letra de la fuente. La longitud de la cadena no debe exceder los 30 caracteres. La función EnumFontFamilies de Windows se puede usar para enumerar todas las fuentes disponibles actualmente. Si lpszFaceName es NULL, la GDI usa un tipo de letra independiente del dispositivo.

pDC
Puntero al objeto CDC que se va a usar para convertir el alto de nPointSize en unidades lógicas. Si es NULL, se usa un contexto de dispositivo de pantalla para la conversión.

Valor devuelto

Distinto de cero si se realiza correctamente; de lo contrario, es 0.

Comentarios

Convierte automáticamente el alto de nPointSize en unidades lógicas mediante el objeto CDC al que apunta pDC.

Cuando termine con el objeto CFont creado por la función CreatePointFont, seleccione primero la fuente fuera del contexto de dispositivo y elimine luego el objeto CFont.

Ejemplo

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

Esta función es la misma que CreateFontIndirect, salvo que el miembro lfHeight de LOGFONT se interpreta en décimas de punto en lugar de unidades de dispositivo.

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

Parámetros

lpLogFont
Apunta a una estructura LOGFONT que define las características de la fuente lógica. El miembro lfHeight de la estructura LOGFONT se mide en décimas de un punto en lugar de unidades lógicas. (Por ejemplo, establezca lfHeight en 120 para solicitar una fuente de 12 puntos).

pDC
Puntero al objeto CDC que se va a usar para convertir el alto de lfHeight en unidades lógicas. Si es NULL, se usa un contexto de dispositivo de pantalla para la conversión.

Valor devuelto

Distinto de cero si se realiza correctamente; de lo contrario, es 0.

Comentarios

Esta función convierte automáticamente el alto de lfHeight en unidades lógicas mediante el objeto CDC al que apunta pDC antes de pasar la estructura LOGFONT a Windows.

Cuando termine con el objeto CFont creado por la función CreatePointFontIndirect, seleccione primero la fuente fuera del contexto de dispositivo y elimine luego el objeto CFont.

Ejemplo

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

Devuelve un puntero a un objeto CFont cuando se proporciona un identificador HFONT a un objeto de fuente de GDI de Windows.

static CFont* PASCAL FromHandle(HFONT hFont);

Parámetros

hFont
Identificador HFONT de una fuente de Windows.

Valor devuelto

Un puntero a un objeto CFont si se realiza correctamente; de lo contrario, NULL.

Comentarios

Si no hay un objeto CFont ya asociado al identificador, se crea y asocia un objeto CFont temporal. Este objeto CFont temporal solo es válido hasta la próxima vez que la aplicación tenga tiempo de inactividad en su bucle de eventos, momento en el que se eliminan todos los objetos gráficos temporales. Es decir, el objeto temporal solo es válido mientras se procesa un mensaje de ventana.

Ejemplo

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

Llame a esta función para recuperar una copia de la estructura LOGFONT de CFont.

int GetLogFont(LOGFONT* pLogFont);

Parámetros

pLogFont
Puntero a la estructura LOGFONT para recibir la información de la fuente.

Valor devuelto

Es distinto de cero si la función se ejecuta correctamente; de lo contrario, 0.

Ejemplo

// 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 este operador para obtener el identificador de GDI de Windows de la fuente asociada al objeto CFont.

operator HFONT() const;

Valor devuelto

Identificador del objeto de fuente de GDI de Windows asociado a CFont si se ejecuta correctamente; de lo contrario NULL.

Comentarios

Dado que este operador se usa automáticamente para las conversiones de CFont a Fuentes y texto, puede pasar objetos CFont a funciones que esperan HFONT.

Para más información sobre el uso de objetos gráficos, consulte Objetos gráficos en Windows SDK.

Ejemplo

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

Consulte también

Ejemplo de MFCHIERSVR
CGdiObject (clase)
Gráfico de jerarquías