2014-05-01 25 views
1

我正在修改我公司现有的一段代码。我们目前有我们自己的自定义表单,它将其大小存储在配置文件中,以便当用户返回时,窗口大小与以前相同。我注意到的情况是,在用更高的DPI设置进行测试之后,所存储的大小是来自DPI设置所需的最小大小的膨胀大小。举个例子,我有一个登录表单,它是96x96 DPI的374 x 243。当我以150%加载应用程序时,表单展开为695x467,略小于任一方向的尺寸的两倍。如果我将计算机更改为DPI上的100%,则登录表单保持在695x467,这是该DPI上的一个更大的显示屏。如何获得当前表单的96x96 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%的增长,这是一个比我想要的更加棘手的问题(我最初希望能够根据Graphics.DpiXGraphics.DpiY对象进行转换),但我想我会问,以防万一有人知道一个简单的答案。谢谢。

+0

我确定有人有你的答案,但说实话,你存储表单的大小的方式就是这样,表单的大小......如果你在桌面上搞乱了DPI/Zoom,表格的大小根本不变,这是正常的。它应该保持设置大小的参数,而不是尺寸VS缩放参数......无论如何。 – MaxOvrdrv

+0

@MaxOvrdrv:这将是理想的,但不幸的是,它似乎并没有这样工作。 Size值明显不同,尽管我认为可能必须将表单设置为AutoSize以适应其中的控件。增加新的DPI设置的控件,并增加表单。 –

+0

你试过调试过吗?例如:在表单上放置一个按钮以进行测试,并在按钮单击事件中,触发一个消息框,告诉您表单的实际大小。更改DPI,警报大小,现在您知道系统在每个DPI设置上看到的大小...;) - AutoSize可能是一个很好的检查/地点,可以开始查看DPI更改时大小是否发生变化。 – MaxOvrdrv

回答

1

唯一的答案我对你是有点变通办法的......如果是我,我会简单地存储形式的尺寸,以便得到正确的一个DPI头...

从屏幕上获得DPI在C#:与此信息

using (Graphics graphics = Graphics.FromHwnd(IntPtr.Zero)) 
{ 
    float dpiX = graphics.DpiX; 
    float dpiY = graphics.DpiY; 
} 

,你可以在你的配置保存文件基础上,DPI形式的大小...然后根据读取加载适当大小以上的DPI。你的配置值的名称可能类似于“Size_At_96_96”,然后该值将是表单的大小...

对不起,如果我没有任何更多的答案给你,但我发现除非你与WPF一起工作,你遇到的事情发生在每个人身上。

相关问题