我正在修改我公司的一段现有代码。我们目前有自己的自定义表单,它将其大小存储在配置文件中,这样当用户返回时,窗口的大小与之前相同。我注意到的问题是,在使用更高DPI设置进行测试后,存储的大小是该DPI设置所需的最小大小。举个例子,我的登录表格为374 x 243,96x96 DPI。当我以150%加载应用程序时,表单扩展为695x467,比任一方向的尺寸略小一倍。如果我在DPI上将计算机更改回100%,则登录表单将保持在695x467,即该DPI处的显示屏大得多。
我们用来存储大小的代码如下:
AppConfig.GetAppConfig().SetFormAttrValue(Name, "LocationX", Location.X);
AppConfig.GetAppConfig().SetFormAttrValue(Name, "LocationY", Location.Y);
AppConfig.GetAppConfig().SetFormAttrValue(Name, "Width", Size.Width);
AppConfig.GetAppConfig().SetFormAttrValue(Name, "Height", Size.Height);
是否有一个好的属性可以读取以获取表单的非缩放大小?我怀疑,基于从100%到150%的非线性增加,变成185%以上的增加,这是一个比我更喜欢的更难解决的问题(I' d最初希望能够根据Graphics.DpiX
和Graphics.DpiY
对象进行转换,但我想如果有人知道一个简单的答案,我会问。谢谢。
答案 0 :(得分:1)
我给你的唯一答案是一个解决方法...如果是我,我会简单地存储表格的大小,带有DPI标题以获得正确的答案......
从C#中的屏幕获取DPI:
using (Graphics graphics = Graphics.FromHwnd(IntPtr.Zero))
{
float dpiX = graphics.DpiX;
float dpiY = graphics.DpiY;
}
使用此信息,您可以在配置文件中保存基于DPI的表单大小...然后根据上面的DPI读取加载适当的大小。您的配置值的名称可能类似于" Size_At_96_96",然后该值将是表单的大小......
很抱歉,如果我没有为您提供更多答案,但我发现除非您使用WPF,否则您遇到的事情都会发生在每个人身上。