对于您想要的显示尺寸Screen http://msdn.microsoft.com/en-us/library/system.windows.forms.screen.aspx.PrimaryScreen.Bounds.Size
(or Screen.GetBounds(myform)
).
如果您想要 DPI,请使用DpiX http://msdn.microsoft.com/en-us/library/system.drawing.graphics.dpix.aspx and DpiY http://msdn.microsoft.com/en-us/library/system.drawing.graphics.dpiy.aspx的属性Graphics http://msdn.microsoft.com/en-us/library/system.drawing.graphics.aspx:
PointF dpi = PointF.Empty;
using(Graphics g = this.CreateGraphics()){
dpi.X = g.DpiX;
dpi.Y = g.DpiY;
}
等一下!您想要实际的尺寸,将尺子放在显示器上并测量尺寸?!不可以。不能使用any操作系统服务。操作系统不知道显示器的实际尺寸,也不知道用户如何校准显示器。其中一些信息理论上是可以检测到的,但它的确定性不足以让操作系统可靠地使用它,所以它不能。
作为解决方法,您可以尝试一些方法。
- 您可以尝试查询已安装的监视器设备的显示字符串(我不知道该怎么做),看看是否可以从中解析出合理的大小。例如,显示器可能是“ValueBin E17p”,并且您might由此推断它是一个 17" 显示器。当然,这个显示字符串很可能是“Plug and Play Monitor”。这个方案充其量是相当粗略的。
- 你可以ask用户拥有什么尺寸的显示器。Maybe他们会知道的。
一旦你知道(或think你知道)显示器的对角线尺寸,你需要找到它的物理长宽比。再说一遍,有几件事:
- 假设当前像素长宽比与显示器的物理长宽比匹配。这假设 (A) 用户选择了最适合其显示器的分辨率,并且 (B) 显示器具有方形像素。我不知道目前面向消费者的计算机显示器有没有方形像素,但较旧的显示器有,较新的显示器可能有。
- 询问用户。Maybe他们会知道的。
Once you know (or think you know) what the monitor's diagonal size and physical aspect ratio are, then you you can calculate it's physical width and height. A2 + B2 = C2, so a few calculations will give it to you good:
If you found out that it's a 17" monitor, and its current resolution is 1280 x 1024:
12802 + 10242 = 2686976
Sqrt(2686976) = 1639.1998047828092637409837247032
17" * 1280 / 1639.2 = 13.274768179599804782820888238165"
17" * 1024 / 1639.2 = 10.619814543679843826256710590532"
这使得物理宽度为 13.27 英寸,物理高度为 10.62 英寸。这使得像素为 13.27" / 1280 = 10.62" / 1024 = 0.01037" 或约 0.263 毫米。
当然,如果用户没有合适的分辨率,显示器具有古怪的非方形像素,或者它是较旧的模拟显示器并且控件未正确调整以使显示器填充整个物理空间,则所有这些都是无效的屏幕。或者更糟糕的是,它可能是一台投影仪。
最后,您可能最好执行校准步骤,让用户实际上将尺子举到屏幕上,并为您测量某物的尺寸。你可以:
- 让用户在相距一英寸(或一厘米)的任意两点上单击鼠标。
- 在屏幕上绘制一个盒子,让用户按向上和向下箭头调整其高度,按左右箭头调整其宽度,直到盒子根据标尺精确为一英寸(或厘米)见方。
- 在屏幕上画一个盒子,让用户告诉你它的每个维度有多少英寸/厘米。
无论你做什么,不要期望您的结果 100% 准确。对于您(或用户)来说,有太多的因素在起作用,以至于每次都无法完全正确。
请注意,96 dpi 通常是八九不离十要准确。非投影屏幕上的现代像素都在 0.25 毫米左右,所以你通常会得到about如果显示器设置为其原始分辨率,则每英寸 100 个物理像素(或多或少)。 (当然,这是一个巨大的概括,并且确实not适用于所有显示器。例如,如果我没记错规格的话,Eee PC 的像素尺寸约为 0.19 毫米。)