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
CFont
Requisitos
Encabezado: afxwin.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();
Vea también
Ejemplo de MFCHIERSVR
CGdiObject
(clase)
Gráfico de jerarquías