如何检测用户的字体(DPI)是设置为小,大还是其他?

我需要找出是否用户的屏幕设置为正常的96 dpi(小尺寸),大120 dpi的字体,或其他东西。 如何在VB.NET(首选)或C#中做到这一点?

最好的方法就是根据用户当前的DPI设置让表单自动调整大小。 要做到这一点,只需将AutoScaleMode属性设置为AutoScaleMode.Dpi并启用AutoSize属性。 你可以通过设计器的属性窗口或代码来完成这个工作:

 Public Sub New() InitializeComponent() Me.AutoScaleMode = AutoScaleMode.Dpi Me.AutoSize = True End Sub 

或者,如果您在绘图时需要了解此信息(例如在Paint事件处理程序方法中),则可以从Graphics类实例的DpiXDpiY属性中提取信息。

 Private Sub myControl_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Dim dpiX As Single = e.Graphics.DpiX Dim dpiY As Single = e.Graphics.DpiY ' Do your drawing here ' ... End Sub 

最后,如果您需要即时确定DPI级别,则必须为您的表单创建Graphics类的临时实例,并检查DpiXDpiY属性,如上所示。 表单类的CreateGraphics方法使得这很容易做到; 只要确保你在Using语句中包装这个对象的创建,以避免内存泄漏。 示例代码:

 Dim dpiX As Single Dim dpiY As Single Using g As Graphics = myForm.CreateGraphics() dpiX = g.DpiX dpiY = g.DpiY End Using 

看看DpiX和DpiY的属性。 例如:

 using (Graphics gfx = form.CreateGraphics()) { userDPI = (int)gfx.DpiX; } 

在VB中:

 Using gfx As Graphics = form.CreateGraphics() userDPI = CInt(gfx.DpiX) End Using