Pregunta

Tengo una aplicación de Windows Forms heredados y quiero guardar la posición y el tamaño de la ventana a través de sesiones. He estado usando GetWindowPlacement y < a href = "http://msdn.microsoft.com/en-us/library/ms633544%28VS.85%29.aspx" rel = "nofollow noreferrer"> SetWindowPlacement durante los acontecimientos FormClosing y la carga. El problema que estoy recibiendo es que en la configuración de DPI más altas (tal como el medio, el tamaño a 125%) los tamaños siguen inflando. Voy a llamar a SetWindowPlacement en él con un cierto tamaño, pero cuando GetWindowPlacement se llama, esos números vuelva un 25% más grande, a pesar de que la ventana era del mismo tamaño desde el principio. El mismo tipo de problema existe cuando se guarda el tamaño de un elemento de tamaño variable dentro de la forma.

Ahora bien, esto funciona bien si creo un nuevo proyecto de Windows Forms: El tamaño de las estancias estable incluso cuando funciona a la mayor DPI. Supongo que hay un cierto ajuste legado en las entrañas del proyecto o un cierto ajuste Formulario arcano que está jugando hacia arriba, pero no puedo averiguar dónde.

He llamado IsProcessDPIAware en ambos proyectos y ambos son true. ¿Alguien sabe qué podría estar causando esto?

¿Fue útil?

Solución 2

He encontrado esta configuración ofender en el archivo .resx del formulario:

<data name="$this.AutoScaleBaseSize" type="System.Drawing.Size, System.Drawing">
  <value>5, 13</value>
</data>

Cuando esto estaba presente, VS cambiaría automáticamente el AutoScaleBaseSize de trabajo para sus DPI, pero de nadie más. Para todos los demás, la forma crecería constantemente o encoger.

La elección de AutoScaleMode = Fuente en el panel de propiedades de diseño causó VS que entran en juego y "modernizar" los valores de escala de fuente. Ahora funciona para todos los inhaladores de polvo seco.

Otros consejos

Suena como si de alguna manera están desencadenando escala, según la selección de la propiedad AutoScaleMode de la forma. La diferencia entre los dos proyectos sería la propiedad AutoScaleDimensions, visibles en el archivo Designer.cs.

No está seguro de por qué esto podría causar un problema, pero la clase Form ya utiliza GetWindowPlacement () internamente, RecreateHandleCore () y UpdateWindowState () métodos. Para obtener ayuda real, supongo que necesita para poner un proyecto en alguna repro.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top