高分屏电脑开发的winforms软件如何确保在低分屏显示正常

发布时间 2023-04-30 16:59:10作者: harrychinese

高分屏电脑开发的winforms软件, 如何确保在低分屏显示正常. 其实有两种做法.

  1. 将软件做成 dpiAware, 这个做法需要考虑非常多的情况, 窗体大小/布局/控件大小/字体大小, 做的完美开发成本很高. 优点是, 系统如果部署在比开发机更高DPI的机器上, 显示效果依然很好.
  2. 不启用 dpiAware, 只要开发环境低分屏的显示来设计, 只要不启用dpiAware, 将来在低分屏上运行, 窗体/控件尺寸和字体大小都和设计时一样.
    我这里使用的就是第2种做法, 下面是要点:

Visual studio 禁用自动缩放功能

启动命令行为 devenv.exe /noscale , 这样可保证UI 设计的样子没有缩放效果, 和将来在低分屏运行的尺寸一样.

项目增加 app.manifest 文件

将 dpiAware 设置为false, 禁用 dpiAware

	<application xmlns="urn:schemas-microsoft-com:asm.v3">
		<windowsSettings>
			<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</dpiAware>
			<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
		</windowsSettings>
	</application>

编辑 app.cnfig 文件

将 EnableWindowsFormsHighDpiAutoResizing 设置为false, 否则即使在禁用 dpiAware 情况下, 窗体的位置也会变化.

    <!-- DpiAwareness 设置为效果更好的 PerMonitorV2 模式  -->
	<System.Windows.Forms.ApplicationConfigurationSection>
		<add key="DpiAwareness" value="PerMonitorV2" />
	</System.Windows.Forms.ApplicationConfigurationSection>
	<appSettings>
		<add key="EnableWindowsFormsHighDpiAutoResizing" value="false" />
	</appSettings>

更多 dpiAware 资料

  1. telerik 厂商的说明 https://www.telerik.com/blogs/winforms-scaling-at-large-dpi-settings-is-it-even-possible-
  2. devexpress 厂商的说明 <>https://docs.devexpress.com/WindowsForms/116666/common-features/high-dpi-support>
  3. SOUI 组件的说明 https://www.cnblogs.com/setoutsoft/p/16425917.html