我们的团队使用WinForms维护用C#编写的旧版应用程序。由于该应用程序不会自行处理DPI更改,因此我们当前在应用程序清单中运行DPI Unaware。
这使Windows可以为我们处理DPI缩放,这在99%的时间内都有效。但是,我们的应用程序中有第三方组件(封闭源),例如“ Microsoft Report Viewer”。
此查看器显示的报表有时需要在运行时插入动态(编程)内容。
不幸的是,运行DPI Unaware意味着诸如图形之类的代码。尽管在诸如192之类的DPI上运行监视器,DpiX始终返回虚拟值(“ 96”)。
据我所知,即使Windows库也会返回虚拟的“ 96”值,而不是真正的DPI。调用诸如GetDpiForWindow()之类的函数仍会提供虚拟值。
由于Windows本身为我们处理缩放时WinForms可以很好地缩放,因此我们希望使应用程序DPI保持未知状态。即使这样,我们仍需要访问TRUE DPI,以便我们的团队可以在运行时代码中进行动态调整。
完成此操作的正确方法是什么?