在 Winforms 应用程序中,我遵循了如何编写自适应系统字体和 DPI 设置的 Winforms 代码和.Net Framework 高 DPI 支持中的一般指导来启用 PerMonitorV2 DPI 缩放。我在一个安装了 Windows 10 Anniversary Update (1607) 之后的系统上使用 .NET Framework 4.8 来利用最新的高 DPI 支持功能。
如果应用程序在主屏幕或任何具有与主屏幕相同缩放比例的显示器上启动,则 DPI 缩放看起来很好,但如果任何窗体(应用程序的主窗体或一个辅助顶级窗体)首先显示在与主屏幕不同 DPI 的显示器上,则缩放会完全错误。例如,如果该应用程序在一个 4k/250% 缩放的笔记本电脑屏幕上启动(并有四个其他显示器的缩放比例为 1920x1080/100%),则这个窗体在 4k 屏幕上以 1:1 的缩放比例显示,并且只显示为一个小的 1 平方英寸(仅标题和菜单栏正确缩放):显示错误缩放比例的图像。
该问题似乎是由于这个窗体的当前自动缩放维度在这些情况下未被正确设置所导致的。它们似乎被设置为主屏幕的当前“维度”,而不是窗体正在显示的屏幕。但是,如果该窗体首先显示在主屏幕上,然后移动到具有不同 DPI 的屏幕上,则当前自动缩放维度会被正确更新以反映目标屏幕的实际 DPI,并且该窗体会被正确缩放。因此,例如,如果我将主屏幕设置为 4k/250% 屏幕,然后在一个 1920x1080/100% 屏幕上启动应用程序,当前自动缩放维度(不正确地)设置为 4k/250% 屏幕的维度,导致该窗体被极度过度缩放。但是如果我在主要的 4k/250% 屏幕上启动该应用程序,那么当它首次显示时,它会被正确缩放,然后当它被拖动到其他显示器上(和回到主屏幕)时,它也会被正确缩放。总之,当窗体首次显示时,当前自动缩放维度似乎总是被设置为主监视器的尺寸而不是该窗体正在显示的屏幕的尺寸。 有人知道如何解决这种情况吗?
如果应用程序在主屏幕或任何具有与主屏幕相同缩放比例的显示器上启动,则 DPI 缩放看起来很好,但如果任何窗体(应用程序的主窗体或一个辅助顶级窗体)首先显示在与主屏幕不同 DPI 的显示器上,则缩放会完全错误。例如,如果该应用程序在一个 4k/250% 缩放的笔记本电脑屏幕上启动(并有四个其他显示器的缩放比例为 1920x1080/100%),则这个窗体在 4k 屏幕上以 1:1 的缩放比例显示,并且只显示为一个小的 1 平方英寸(仅标题和菜单栏正确缩放):显示错误缩放比例的图像。
该问题似乎是由于这个窗体的当前自动缩放维度在这些情况下未被正确设置所导致的。它们似乎被设置为主屏幕的当前“维度”,而不是窗体正在显示的屏幕。但是,如果该窗体首先显示在主屏幕上,然后移动到具有不同 DPI 的屏幕上,则当前自动缩放维度会被正确更新以反映目标屏幕的实际 DPI,并且该窗体会被正确缩放。因此,例如,如果我将主屏幕设置为 4k/250% 屏幕,然后在一个 1920x1080/100% 屏幕上启动应用程序,当前自动缩放维度(不正确地)设置为 4k/250% 屏幕的维度,导致该窗体被极度过度缩放。但是如果我在主要的 4k/250% 屏幕上启动该应用程序,那么当它首次显示时,它会被正确缩放,然后当它被拖动到其他显示器上(和回到主屏幕)时,它也会被正确缩放。总之,当窗体首次显示时,当前自动缩放维度似乎总是被设置为主监视器的尺寸而不是该窗体正在显示的屏幕的尺寸。 有人知道如何解决这种情况吗?