WPF 和 Windows 表单应用 returns 不同的 DPI

WPF and Windows Form application returns different DPI

我想根据当前机器的 dpi 从点转换为像素 (C#)。这样做时,特定机器(Lenovo Yoga 500)returns WPF 应用程序中的 144 dpi 和 Windows Forms 应用程序中的 96 dpi。从同一台机器获取不同的值是很奇怪的。

这是我的代码。

Graphics graphics = Graphics.FromHwnd(IntPtr.Zero);
MessageBox.Show(“DPI : “ + graphics.DpiX.ToString());

需要有人帮助我才能获得相同的价值。

这是因为默认情况下,WPF 应用程序是系统 DPI 感知的,因此将为您提供系统 DPI。 另一方面,WinForms 应用程序是 DPI Unaware,因此将始终为您提供 96.0 作为 DPI。

如果您想要显示器的确切 DPI,最好的办法是让您的应用程序具有 Per Monitor DPI Aware 并在 shcore.dll (ShellScalingApi.h) 中使用 GetDpiForMonitor API。