2011-11-03 12 views
5

Estamos teniendo un problema con una de nuestras aplicaciones basadas en Win32 MFC. No se procesa correctamente en pantallas que usan configuraciones de dpi altas. Más específicamente en Windows XP con 120 ppp seleccionados, hay varios lugares en la aplicación donde el texto se amplía pero no sus contenedores (el texto sobrepasa los límites de su botón, etc.). Esto también ocurre en Windows 7 (y Vista) cuando se selecciona> 96 ppp y se selecciona "usar escalado de dpi de estilo XP". Si no se selecciona la escala de estilo de xp, entonces entiendo que Win7 usa virtualización de DPI. Todo se ve bien cuando se usa la virtualización DPI (las cosas están bien borrosas, pero al menos son correctas). De forma predeterminada, en Win7, 120 ppp utiliza la escala de estilo xp y la siguiente configuración (144 ppp) no. Por lo tanto, nuestra aplicación parece correcta a 144 ppp pero incorrecta a 120 ppp.Aplicación para Windows - Problemas DPI

Si edito el manifiesto de las aplicaciones para declarar la aplicación como "DPI consciente", esto cambia de virtualización DPI (pero no de escala de dpi de estilo XP) y esto no me lleva a ninguna parte. Las cosas todavía se ven muy mal (no hay cambio para 120 ppp, ahora 144 ppp están rotos).

Necesito solucionar este problema y he intentado leer sobre DPI/problemas de escala en general y ha sido una experiencia de aprendizaje. Hasta ahora no he encontrado una solución adecuada. Por el momento, actualmente no tengo intención de hacer una corrección completa y correcta (la aplicación escala correctamente todos los elementos de acuerdo con los ppp). Eso implicaría MUCHA reescritura. Creo que realmente hay dos soluciones posibles. Una es apagar cualquier escala de DPI por completo. Eso significaría que si el sistema Win7 de un usuario se configura en 120 ppp, entonces todo en su sistema se vería bien/grande, pero nuestra aplicación se vería correcta, pero sería pequeña en comparación con todo lo demás en otras aplicaciones. La segunda solución sería, de alguna forma, forzar a nuestra aplicación a usar la virtualización DPI, pero nunca usar escalas de dpi de estilo XP. Quiero que esto sea un cambio lateral de la aplicación y no confiar en que los usuarios finales tengan que realizar cambios en la configuración de Windows.

Hasta ahora no he encontrado una manera de lograr ninguna solución.

¿Puede alguien más conocedor de este tema responder y señalarme de la manera correcta?

Gracias

+1

¿El problema está en su código de diseño o en su código de dibujo? Por ejemplo, ¿está el problema de que está creando botones y otros controles estándar x por y píxeles, o el problema es que tiene un código que dibuja sus propios controles (por ejemplo, usando llamadas GDI) que tiene tamaños fijos? ¿Cómo estás haciendo tu diseño? ¿Formas? ¿Plantillas de diálogo? ¿Código personalizado? –

+0

No hay magia aquí, solo tendrá que agrandar sus ventanas. O sus fuentes más pequeñas, elija su veneno. –

Respuesta

2

No se puede forzar DPI virtualización en 120 configuraciones de DPI. He investigado esto para un producto yo mismo porque tener la apariencia difusa en DPI alto parecía una buena solución de compromiso.

Terminamos haciendo una reescritura completa del posicionamiento y escalado de la interfaz de usuario para que se escalara correctamente con la escala de la fuente en una configuración de PPP alta. El cliente ahora tiene plena conciencia de DPI y se adapta correctamente a cualquier configuración de DPI.

El trabajo para hacer esto correctamente tomó a un tipo ~ 3 meses en nuestro caso para un cliente bastante complejo.

Teníamos un plan secundario que nunca probamos, pero podría funcionar para usted: En la puesta en marcha, lea el factor de escala de DPI del sistema operativo. A continuación, reduzca todas las instancias de fuentes que tenga por este factor, de modo que cuando Windows vuelva a escalar las fuentes, vuelvan al tamaño en que la UI pueda ajustarse. Por supuesto, los usuarios con una configuración de DPI alta no obtendrán fuentes más grandes en su aplicación, pero al menos serán utilizables.

Cuestiones relacionadas