2010-03-11 15 views
7

Supongamos que tiene una cadena con texto en dos o más scripts. Cuando utiliza una función GDI como TextOut, (versiones modernas de) Windows hará "font-linking". Es decir, GDI dibujará lo que pueda con su fuente seleccionada y dibujará el resto en una fuente apropiada que elija automágicamente. Por ejemplo, si parte de su texto está en inglés (usando el alfabeto romano), y parte de él es chino (usando caracteres CJK), y tiene seleccionado Arial, la porción en inglés se dibujará en Arial, y la parte china dibujar en otra fuente que tenga los glifos CJK.¿Es posible determinar las fuentes que Windows elige para el enlace de fuentes?

Mi pregunta es, ¿hay alguna manera de determinar qué fuentes elegiría TextOut (o si las eligió) para el enlace de la fuente?

Tengo que dibujar algo de texto con la API de Uniscribe de bajo nivel, que no hace un enlace de fuente automático. Implementé mi propio enlace de fuentes, pero a veces mi algoritmo elige una fuente diferente a la que hace TextOut para el mismo texto. Intento entender mejor el algoritmo de Windows, pero no soy muy bueno identificando fuentes a la vista (especialmente en guiones desconocidos).

Respuesta

2

La fuente se selecciona mediante una entrada de registro. Está bien descrito en this article. Citando la parte pertinente:

Si la fuente de enlace está activado en su dispositivo , se puede examinar el registro enumerando las subclaves de la clave Registro en HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ FontLink \ SystemLink para determinar las asignaciones de las fuentes vinculadas a las fuentes base. Puede agregar enlaces usando Regedit para crear subclaves adicionales .

+3

Gracias, eso es un recurso excelente. Pero he leído en otro blog que esas claves de registro están ahí solo por compatibilidad con versiones anteriores y que en realidad ya no impulsan el enlace de fuentes. Por ejemplo, en mi máquina, TextOut hará enlaces de fuentes para fuentes base que no están en esa parte del registro. Y tampoco es una alternativa a la fuente, ya que las fuentes que se seleccionan para los otros scripts son diferentes dependiendo de la fuente base. –

+0

Revisa IMLangFontLink: http://msdn.microsoft.com/en-us/library/aa767872%28v=VS.85%29.aspx –

+0

Utilicé IMLangFontLink2 en una iteración anterior, pero causó problemas cuando mezclé scripts LTR con scripts RTL. Creo que es una solución bastante antigua y probablemente siga siendo compatible con versiones anteriores. –

Cuestiones relacionadas