我需要找出是否用户的屏幕设置为正常的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
类实例的DpiX
和DpiY
属性中提取信息。
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
类的临时实例,并检查DpiX
和DpiY
属性,如上所示。 表单类的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