MeasureString()为不同的屏幕分辨率提供不同的大小

时间:2015-11-20 12:34:21

标签: c# .net system.drawing dpi

我们正在使用Measurestring()根据文字长度计算尺寸。对于不同的屏幕分辨率,MeasureString()给出不同的大小。

Graphics g;  
Size size = g.MeasureString(GetItemText(this.Items[n]), this.Font).ToSize();  
width=size.width;       

对于屏幕分辨率 125% size.width = 76 和 对于屏幕分辨率 100%和150% size.width = 61

如何在此代码中获得相同的宽度,请建议我使用measuretring()测量大小的一些想法。

等待建议........

1 个答案:

答案 0 :(得分:1)

这是因为125%默认情况下表现不同。例如,在Windows 7中,如果更改DPI设置,由于 Windows XP样式模式,应用程序将知道当前的DPI设置。但是,如果设置为150%,则默认情况下不会设置此复选框,因此应用程序将在DPI unaware模式下工作,这意味着MeasureString将返回与96 DPI相同的结果,并且调整大小将由Windows自动执行。

Windows DPI Setting

通常您可以忽略结果,因为无论如何都会在您的应用程序中放大尺寸。如果您仍想获取Windows的实际DPI值,请在此处查看我的答案:https://stackoverflow.com/a/33412669/5114784

然后你可以像这样升级你的绘图(但正如我所说,通常不需要):

// See GetSystemDpi in the referenced post
float zoomFactor = (float)GetSystemDpi() / 96f;
size.Width = (int)(size.Width * zoomFactor);
size.Height = (int)(size.Height * zoomFactor);