WPF和Windows窗体应用程序返回不同的DPI

本文关键字:DPI 返回 应用程序 Windows 窗体 WPF | 更新日期: 2023-09-27 18:29:28

我想根据当前机器的dpi将点转换为像素(C#)。在执行此操作时,特定机器(联想Yoga 500)在WPF应用程序中返回144 dpi,在Windows窗体应用程序中则返回96 dpi。从同一台机器上得到不同的值是很奇怪的。

这是我的密码。

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

需要有人在这方面帮助我获得同样的价值。

WPF和Windows窗体应用程序返回不同的DPI

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

如果您想要显示器的确切DPI,最好的选择是使您的应用程序Per-monitor DPI Aware,并在shcore.dll(ShellScalingApi.h)中使用GetDpiForMonitor API。