众所周知,Windows 7 可用的 DPI 缩放比例为 100%、125%、150% 和 200%。这四个DPI百分比的实际DPI值是
Percentage - DPI Values
100% - 96
125% - 120
150% - 144
200% - 192
请引用 DPI 缩放的链接: http://www.techrepublic.com/blog/windows-and-office/get-a-better-view-in-windows-7-by-adjusting-dpi-scaling/
我想使用 C# 获取 DPI 值。因此,我试图通过遵循 C# 代码来实现。
float x=0;
float y=0;
Graphics gp = Graphics.FromHwnd(IntPtr.Zero);// we can also use this.CreateGraphics()
x = gp.DpiX;
y = gp.DpiY;
我得到的输出如下,150% 和 200% 是错误的
100% - 96 //both x,y values
125% - 120 //both x,y values
**150% - 96 //both x,y values
200% - 96 //both x,y values**
如果您没有将您的应用程序声明为“DPI 感知”,Windows 会欺骗您,假装它设置为 96 DPI(尽管它不是)并负责缩放您的应用程序本身。
您可以通过任一方式“修复”此问题
- 将
dpiAware
条目添加到您的应用程序 list 文件或
- 调用
SetProcessDPIAware
Windows API 方法。
例如,在这个 SO 答案中可以找到两者的示例:
为了让事情变得更加复杂,Windows 8.1 引入了每个显示器的 DPI 设置,弃用了 SetProcessDPIAware
。这其实是一件好事,但是it's hard to get it right .
我是一名优秀的程序员,十分优秀!