我正在尝试使用C#构建Windows窗体应用程序。如何在.NET中获得DPI?我以前读过有DPIX和DPIY,它们可以在.NET中使用来获取当前的DPI。是这样吗?谢谢大家。
55ooxyrt1#
使用Graphics类的示例。您可以在表单中使用以下命令(可以在表单的Load事件处理程序中):
Graphics
Load
float dx, dy; Graphics g = this.CreateGraphics(); try { dx = g.DpiX; dy = g.DpiY; } finally { g.Dispose(); }
6psbrbz92#
在.NET Framework 4.7或更高版本(例如.NET 6.0)中,可以使用Control.DeviceDpi属性获取当前显示控件的屏幕的DPI值。
int dpi = this.DeviceDpi;
Control.DeviceDpi属性返回的值取决于应用程序的DPI感知模式。在.NET 5.0和更新版本中,您可以使用Application.SetHighDpiMode方法在WinForms应用程序的入口点设置DPI感知。可能的模式列在this MSDN page上。最好的模式是“PerminorV2”,它考虑到当前屏幕的DPI设置:
Application.SetHighDpiMode(HighDpiMode.PerMonitorV2);
在.NET 4.7和.NET 4.8中,您应该在清单文件中声明应用程序的DPI感知。我推荐“Perceptor V2”。请查看以下文档主题以获取更多信息和示例:Setting the default DPI awareness for a process
2条答案
按热度按时间55ooxyrt1#
使用
Graphics
类的示例。您可以在表单中使用以下命令(可以在表单的Load
事件处理程序中):6psbrbz92#
在WinForms应用程序中获取DPI的现代方法
在.NET Framework 4.7或更高版本(例如.NET 6.0)中,可以使用Control.DeviceDpi属性获取当前显示控件的屏幕的DPI值。
Control.DeviceDpi属性返回的值取决于应用程序的DPI感知模式。
在.NET 5.0和更新版本中,您可以使用Application.SetHighDpiMode方法在WinForms应用程序的入口点设置DPI感知。可能的模式列在this MSDN page上。最好的模式是“PerminorV2”,它考虑到当前屏幕的DPI设置:
在.NET 4.7和.NET 4.8中,您应该在清单文件中声明应用程序的DPI感知。我推荐“Perceptor V2”。请查看以下文档主题以获取更多信息和示例:
Setting the default DPI awareness for a process