es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Tags:  ,

Answer

  1. Avatar for 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 usar GetGlyphOutline().

    Puede utilizar la función GetObject() para obtener la estructura LOGFONT asociada con el identificador de la fuente. Esta estructura contiene un miembro llamado lfOutPrecision, 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 estructura LOGFONT asociada con hFont. A continuación, se utiliza el miembro lfOutPrecision de esta estructura para determinar si la fuente es de trama o vectorial. Si lfOutPrecision es OUT_RASTER_PRECIS, entonces la fuente es de trama. Si es OUT_TT_PRECIS o OUT_STROKE_PRECIS, entonces la fuente es vectorial.

Comments are closed.