winforms EnableWindowsFormsHighDpiAutoResizing设置在C# .NET窗口窗体应用程序中有什么作用?

zzwlnbp8  于 2022-11-16  发布在  Windows
关注(0)|答案(1)|浏览(156)

我正在尝试使用C# .NET和常规Windows窗体(而不是WPF)制作一个每监视器DPI感知应用程序。
我了解选择每台监视器DPI支持的概念,并已在清单中这样做:

<!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher
   DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need 
   to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should 
   also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config. -->

<application xmlns="urn:schemas-microsoft-com:asm.v3">
  <windowsSettings>
    <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">True/PM</dpiAware>
  </windowsSettings>
</application>

当我选择这样做时,当我的应用程序从96 DPI显示器(我的默认显示器)拖到144 DPI显示器上时,它的 * 像素 * 大小根本不会改变(也就是说,应用程序在两个显示器上的像素完全相同,保存最小化-最大化-关闭字形有很小的差异)。因此,应用程序非常小,文本在144 DPI显示器上很难阅读。
EnableWindowsFormsHighDpiAutoResizing设置似乎没有任何作用,因为我的应用程序以完全相同的方式显示此设置是true还是false,除非我在app.config文件中做错了什么:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
  </appSettings>

  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2"/>
  </startup>
</configuration>

有人能解释一下这个选项的作用吗?
它是编写C# Windows窗体应用程序的解决方案的一部分吗?该窗体应用程序在从96 DPI监视器拖到144 DPI监视器上时会自动调整自身大小(我所说的自动是指,无需编写代码来迭代所有控件并设置自定义比例因子)。
我对这个问题做了很多小时的研究,自己也没有一个明确的答案。
看起来如果我选择每台显示器的DPI感知,那么我必须自己处理WM_DPICHANGED才能做一些事情。如果这是答案,那就这样吧,但我真的觉得我错过了一些内置的做事方式。

3b6akqbq

3b6akqbq1#

“dpiAware = true”表示应用程序应处理DPI更改,否则Windows操作系统将为您缩放表单/字体。这是我的理解。

相关问题