【发布时间】:2012-01-17 14:28:43
【问题描述】:
我最初的直觉是通过 Graphics 实例获取系统的当前 DpiY 设置,但我不知道如何获取。
通过反射器拼写我看到微软使用不安全的代码来管理它:
IntPtr dC = UnsafeNativeMethods.GetDC(NativeMethods.NullHandleRef);
try
{
using (Graphics graphics = Graphics.FromHdcInternal(dC))
{
float num = graphics.DpiY;
}
}
当我没有图形时,构造图形的托管等效方法是什么?
我试过了:
using (Graphics g = Graphics.FromHdc(IntPtr.Zero))
{
return font.GetHeight(g.DpiY);
}
但这会引发 Value cannot be null 异常。
【问题讨论】:
-
通常,当我完成我的问题并弄清楚我的真正的问题是什么时,我会更改我的标题。请检查我的编辑以确保我没有回答您的问题。
-
@Will 这是我最初问题的重点。我对字体大小(例如控件大小、图像大小、缩放量)并不总是感兴趣。我担心有人可能会短路问题,并尝试使用
MeasureText来获取字体高度。人们倾向于将问题与适用性混淆。我试过省略理由,只问我的问题。但是人们在不知道为什么我想做某事的情况下拒绝回答。我有完整的为什么示例,然后你让 John Saunders 投反对票,因为他脾气暴躁 (stackoverflow.com/q/8141795/12597) -
@Will 这是另一个很好的问题示例。一个人问了我 LINQ where or filter c# (stackoverflow.com/questions/5954965/…) 的确切问题。答案欺骗了问题,而是回答了例子。今天我有完全相同的问题,但现有的答案不能回答这个问题。我必须构建完全相同的问题(重新排列标题中的单词以使其看起来完全不同 LINQ filter where or (stackoverflow.com/questions/8900131/linq-filter-where-or)。