Creación y selección de fuentes

El cuadro de diálogo Común de fuentes simplifica el proceso de creación y selección de fuentes. Al inicializar la estructura CHOOSEFONT y llamar a la función CHOOSEFONT , una aplicación puede admitir la misma interfaz de selección de fuentes que anteriormente requería muchas líneas de código personalizado. (Para obtener más información sobre el cuadro de diálogo Común de fuentes, vea Biblioteca de cuadros de diálogo comunes).

Selección por el usuario

La mayoría de las operaciones de creación y selección de fuentes implican al usuario. Por ejemplo, las aplicaciones de procesamiento de texto permiten al usuario seleccionar fuentes únicas para encabezados, notas al pie y texto del cuerpo. Una vez que el usuario selecciona una fuente mediante el cuadro de diálogo Fuente y presiona el botón Aceptar , la función CHOOSEFONT inicializa los miembros de una estructura LOGFONT con los atributos de la fuente solicitada. Para usar esta fuente para las operaciones de salida de texto, una aplicación primero debe crear una fuente lógica y, a continuación, seleccionar esa fuente en su contexto del dispositivo. Una fuente lógica es una descripción proporcionada por la aplicación de una fuente ideal. Un desarrollador puede crear una fuente lógica llamando a las funciones CreateFont o CreateFontIndirect . En este caso, la aplicación llamaría a CreateFontIndirect y proporcionaría un puntero a la estructura LOGFONT inicializada por CHOOSEFONT. En general, es más eficaz llamar a CreateFontIndirect porque CreateFont requiere varios parámetros, mientras que CreateFontIndirect solo requiere un puntero a LOGFONT.

Para que una aplicación pueda empezar a dibujar texto con una fuente lógica, debe encontrar la coincidencia más cercana de las fuentes almacenadas internamente en el dispositivo y las fuentes cuyos recursos se han cargado en el sistema operativo. Las fuentes almacenadas en el dispositivo o en el sistema operativo se denominan fuentes físicas. El proceso de búsqueda de la fuente física que coincide más estrechamente con una fuente lógica especificada se denomina asignación de fuentes. Este proceso se produce cuando una aplicación llama a la función SelectObject y proporciona un identificador que identifica una fuente lógica. La asignación de fuentes se realiza mediante un algoritmo interno que compara los atributos de la fuente lógica solicitada con los atributos de las fuentes físicas disponibles. Cuando el algoritmo del asignador de fuentes completa su búsqueda y determina la coincidencia más cercana posible, la función SelectObject devuelve y la aplicación puede empezar a dibujar texto con la nueva fuente.

La función SetMapperFlags especifica si el algoritmo del asignador de fuentes solo busca fuentes físicas con relaciones de aspecto que coincidan con el dispositivo físico. La relación de aspecto de un dispositivo es la relación formada por el ancho y el alto de un píxel en ese dispositivo.

La fuente del sistema (también conocida como shell o fuente predeterminada) es la fuente usada para el texto en las barras de título, los menús y los cuadros de diálogo.

Consideraciones especiales sobre la selección de fuentes

Aunque la mayoría de las operaciones de selección de fuentes implican al usuario, hay algunas instancias en las que esto no es cierto. Por ejemplo, un desarrollador puede querer usar una fuente única en una aplicación para dibujar texto en una ventana de control. Para seleccionar una fuente adecuada, la aplicación debe poder determinar qué fuentes están disponibles, crear una fuente lógica que describa una de estas fuentes disponibles y, a continuación, seleccionar esa fuente en el contexto de dispositivo adecuado.

Una aplicación puede enumerar las fuentes disponibles mediante las funciones EnumFonts o EnumFontFamilies . Se recomienda enumFontFamilies porque enumera todos los estilos asociados a un nombre de familia. Esto puede ser útil para fuentes con muchos o estilos inusuales y para fuentes que cruzan fronteras internacionales.

Una vez que una aplicación ha enumerado las fuentes disponibles y ha localizado una coincidencia adecuada, debe usar los valores devueltos por la función de enumeración de fuentes para inicializar los miembros de una estructura LOGFONT . A continuación, puede llamar a la función CreateFontIndirect y pasarle un puntero a la estructura LOGFONT inicializada. Si la función CreateFontIndirect se realiza correctamente, la aplicación puede seleccionar la fuente lógica llamando a la función SelectObject . Al inicializar los miembros de la estructura LOGFONT , asegúrese de especificar un juego de caracteres específico en el miembro lfCharSet . Este miembro es importante en el proceso de asignación de fuentes y los resultados serán incoherentes si este miembro no se inicializa correctamente. Si especifica un nombre de tipo de letra en el miembro lfFaceName de la estructura LOGFONT , asegúrese de que el valor lfCharSet coincide con el juego de caracteres del tipo de letra especificado en lfFaceName. Por ejemplo, si desea seleccionar una fuente como MS Mincho, lfCharSet debe establecerse en el valor predefinido SHIFTJIS_CHARSET.

Las fuentes de muchos idiomas asiáticos orientales tienen dos nombres de letra: un nombre de inglés y un nombre localizado. CreateFont, CreateFontIndirect y CreateFontIndirectEx toman el nombre del tipo de letra localizado para una configuración regional del sistema que coincide con el idioma, pero toman el nombre de tipo de letra inglés para todas las demás configuraciones regionales del sistema. El mejor método es probar un nombre y, en caso de error, probar el otro. Tenga en cuenta que EnumFonts, EnumFontFamilies y EnumFontFamiliesEx devuelven el nombre de tipo de letra en inglés si la configuración regional del sistema no coincide con el idioma de la fuente. A partir de Windows 2000, este ya no es un problema porque el asignador de fuentes para CreateFont, CreateFontIndirect y CreateFontIndirectEx reconoce cualquier nombre de tipo de letra, independientemente de la configuración regional.