c# - texto - cambiar tipo de letra en vba
C#Escalar el contenido UserControl para que coincida con los usuarios Dpi/Tamaño de la fuente (2)
¿Cómo hago para que UserDrawn UserControl respete los ppp (96/120 / xxx) y / o el tamaño de fuente (normal, grande, extra grande) de los usuarios?
Algunas personas sugieren usar las propiedades DpiX y DpiY en un objeto Graphics, pero eso no parece tener nada bajo mi control (es decir, siempre están configuradas en 96, independientemente de qué tamaño de fuente o de dpi elijo).
Hay otra pregunta similar aquí en StackOverflow en la que sugiere utilizar las propiedades AutoScale, pero las soluciones sugeridas tampoco hacen nada realmente.
¿No hay forma de hacer esto en .NET a excepción de confiar en WPF?
Debería establecer la propiedad AutoScaleMode del UserControl en AutoScaleMode.Dpi y no establecer la propiedad AutoScale en verdadero. Si lo hace, restablecerá AutoScaleMode en None. La propiedad AutoScale está obsoleta y solo está disponible para compatibilidad con versiones anteriores (consulte la Nota importante en este artículo de MSDN ).
Además, en Windows Vista / 7, a menos que especifique explícitamente que su aplicación es compatible con DPI, Windows emulará un entorno PPP predeterminado para que su aplicación renderice con 96 DPI, luego escalará el mapa de bits resultante al tamaño apropiado. Para evitar eso, puede modificar el manifiesto de su aplicación para informar a Windows de que en realidad está consciente de DPI: consulte el apartado Uso de manifiesto para declarar la sección de conocimiento de DPI en este artículo .
Tengo el mismo problema, traté de usar GetDC + GetDeviceCaps + ReleaseDC, excepto que usé Graphics works, al menos en Vista32. Todavía no tengo experiencia con DPI, pero nadie respondió esto y al menos esto podría ser útil para otros.
Echa un vistazo a Crear una aplicación de DPI-Aware . Esta mención explica por qué siempre puede devolver 96 independientemente de la configuración real de PPP.
Cita desde el enlace de arriba:
Escalado DPI en una aplicación Win32
En aplicaciones Win32, haga lo siguiente:
- Use la función SetProcessDPIAware para cancelar la escala de dpi.
- Al dimensionar elementos de interfaz dibujados, use medidas físicas, como centímetros. Al usar las dimensiones físicas en lugar de los píxeles, garantiza un dimensionamiento uniforme en todos los tipos de pantallas.
- Para obtener la configuración de dpi del sistema, use la función CDC :: GetDeviceCaps con el indicador LOGPIXELSX. Si no cancela la escala de ppp, esta llamada devuelve el valor predeterminado de 96 ppp.
- Use la función GetSystemMetrics para obtener tamaños preferidos de los elementos de la interfaz de usuario, como los bordes de las ventanas. Cuando la escala de dpi está desactivada, los valores de medición que se devuelven para los elementos de la interfaz se ajustan a la configuración de ppp seleccionada. Si la escala de dpi está activa, la función devuelve las medidas basadas en 96 ppp, independientemente de la configuración de ppp del sistema.
Respondido desde: Acerca de DPI Issue
Código de muestra reescrito con usando -statement ( fuente original ):
float dpiX = 96, dpiY = 96;
using(Graphics graphics = this.CreateGraphics())
{
dpiX = graphics.DpiX;
dpiY = graphics.DpiY;
}