Dado un HFONT, ¿cómo puedo saber si es una fuente de símbolos? Una biblioteca de PDF que estoy usando necesita tratar las fuentes de símbolos de manera diferente, por lo que necesito una forma de decir mediante programación si una fuente determinada es una fuente de símbolos o no.¿Cómo puedo saber si una fuente es una fuente de símbolo?
Respuesta
La respuesta de Mark Ransom va a funcionar el 99.999% del tiempo, pero hay una posibilidad teórica de que podría dar una respuesta incorrecta.
Para evitar esta posibilidad, se debe utilizar para obtener el GetTextMetrics
TEXTMETRICS
de la fuente real y comprobar si el tmCharSet
es SYMBOL_CHARSET
.
¿Cuál es la diferencia entre marcar lfCharSet
y tmCharSet
?
Cuando crea un HFONT
, Windows hace una copia interna del LOGFONT
. Describe la fuente que desea, que podría ser diferente de la fuente que obtiene.
Al seleccionar HFONT
en un contexto de dispositivo (o información), el asignador de fuentes encuentra la fuente real que mejor coincide con el LOGFONT
asociado con ese HFONT
. Sin embargo, la mejor combinación podría no ser una coincidencia exacta. Por lo tanto, cuando necesite averiguar algo acerca de la fuente real, debe tener cuidado de consultar el HDC
en lugar del HFONT
.
Si consulta el HFONT
con GetObject
, acaba de obtener el LOGFONT
original. GetObject
no dice nada acerca de la fuente real porque no sabe qué fuente real eligió el mapeador de fuentes (o elegirá).
Las API que preguntan acerca de la fuente seleccionada en un DC en particular, como GetTextMetrics
, GetTextFace
, etc., le darán información acerca de la fuente real.
Para este problema, la respuesta de Mark (usando GetObject
) probablemente siempre va a funcionar, porque las probabilidades de que el mapeador de fuentes elija una fuente de símbolos cuando quiere una fuente textual (o viceversa) son minúsculas. Sin embargo, en general, cuando desee saber algo sobre la fuente real, busque la forma de preguntar en el HDC
.
- 1. Cómo determinar mediante programación si una fuente RSS es una fuente de información completa o parcial
- 2. ¿Cómo puedo saber si una propiedad es una colección genérica?
- 3. ¿Cómo puedo saber si una tabla es una matriz?
- 4. Fuente de símbolo en ABCpdf
- 5. ¿Cómo puedo cargar temporalmente una fuente?
- 6. ¿Helvetica es una fuente base de navegador?
- 7. ¿Cómo puedo saber qué fuente está usando Chrome?
- 8. ¿Cómo puedo saber si una columna es auto_increment en mysql?
- 9. ¿Cómo puedo saber si una mónada es conmutativa?
- 10. Pruebe si hay una fuente instalada
- 11. ¿Cómo puedo cambiar la fuente de una etiqueta mediante programación?
- 12. ¿Cómo saber si una cadena es xml?
- 13. PowerShell: ¿Cómo obtener una fuente como fuente de un archivo?
- 14. cómo saber si una variable de JavaScript es una función
- 15. Cómo autenticar una fuente RSS
- 16. ¿Cómo saber si una URL es una url de intranet?
- 17. ¿Rockwell es una fuente web segura?
- 18. ¿Cómo puedo detectar los caracteres definidos en una fuente?
- 19. Cómo comprobar si una fuente admite un estilo específico
- 20. ¿Cómo puedo saber si una variable VARCHAR contiene una subcadena?
- 21. ¿Cómo establecer múltiples estilos de fuente al crear una instancia de una fuente?
- 22. PHP ¿Cómo saber si una variable es una referencia?
- 23. Vender el código fuente, ¿qué debo saber
- 24. ¿Cómo puedo saber si una variable de python es una cadena o una lista?
- 25. ¿Puedo incrustar una fuente personalizada en una aplicación de Android?
- 26. Cómo convertir una fuente de mapa de bits (.FON) en una fuente truetype (.TTF)?
- 27. ¿Cómo saber si una oración es una pregunta (interrogativa)?
- 28. cambiar una fuente programación
- 29. Cómo depurar fuente JDK
- 30. ¿Cómo bloqueo una cierta fuente en Firefox?
¡Día! Estaba leyendo la página de LOGFONT en http://msdn.microsoft.com/en-us/library/dd145037%28v=VS.85%29.aspx y me ganaste con la respuesta ... –
Esto probablemente sea en la práctica, pero en teoría podría fallar. GetObject devuelve una copia de LOGFONT que se utilizó para especificar la fuente. Pero el mapeador de fuentes podría haber sustituido una fuente diferente. Si bien parece extremadamente improbable que sea una fuente de símbolos para una fuente textual (o viceversa), podría suceder en teoría. Así que es mejor que revise el campo tmCharSet en el TEXTMETRIC devuelto por GetTextMetrics, ya que debería representar la fuente real en lugar de la fuente lógica. –
@AdrianMcCarthy Pensé que 'GetObject' devuelve un' LOGFONT' de la fuente que se seleccionó realmente, no la que se solicitó originalmente; Puede valer la pena verificar un experimento, a menos que tengas un enlace que lo corrobore. Si crees que 'GetTextMetrics' es mejor, otra respuesta sería bienvenida. –