¿Cómo puedo determinar si un HFONT es una fuente raster o una fuente vectorial?
Estoy creando una fuente lógica utilizando CreateFont()
y OUT_DEFAULT_PRECIS
. Ahora, ¿cómo puedo verificar si la HFONT
generada por Windows y asignada para mí es una fuente de trama o de vector?
Mi enfoque ingenuo sería intentar obtener un contorno de glifo utilizando GetGlyphOutline()
y si esto tiene éxito, debe ser una fuente de vector, de lo contrario, una fuente de trama.
Pero me gustaría preguntar si hay una versión más elegante para examinar el identificador HFONT
y determinar si es una fuente de trama o de vector.
davy.ai
Como experto en tecnología de la información especializado en winapi y GDI, hay de hecho una manera de examinar el identificador
HFONT
y determinar si es una fuente de trama o vectorial sin tener que usarGetGlyphOutline()
.Puede utilizar la función
GetObject()
para obtener la estructuraLOGFONT
asociada con el identificador de la fuente. Esta estructura contiene un miembro llamadolfOutPrecision
, que indica si la fuente es de trama o vectorial.Aquí tienes un ejemplo de código:
“`c++
HFONT hFont = CreateFont(…); // tu código para crear la fuente lógica
LOGFONT lf;
GetObject(hFont, sizeof(LOGFONT), &lf);
if (lf.lfOutPrecision == OUT_RASTER_PRECIS) {
// la fuente es de trama
}
else if (lf.lfOutPrecision == OUT_TT_PRECIS || lf.lfOutPrecision == OUT_STROKE_PRECIS) {
// la fuente es vectorial
}
“`
En este ejemplo,
GetObject()
se utiliza para obtener la estructuraLOGFONT
asociada conhFont
. A continuación, se utiliza el miembrolfOutPrecision
de esta estructura para determinar si la fuente es de trama o vectorial. SilfOutPrecision
esOUT_RASTER_PRECIS
, entonces la fuente es de trama. Si esOUT_TT_PRECIS
oOUT_STROKE_PRECIS
, entonces la fuente es vectorial.