我需要找出用户的屏幕是否设置为正常的96 dpi(小尺寸),大的120 dpi字体或其他东西。我如何做到这一点在VB.NET(首选)或C#?如何检测用户的字体(DPI)是否设置为小,大或其他?
回答
的最好办法就是让形式自动调整自身的大小,根据用户当前的DPI设置。要做到这一点,只需将AutoScaleMode
property设置为AutoScaleMode.Dpi
并启用AutoSize
属性即可。你可以做到这一点无论是从属性窗口在设计或虽然代码:
Public Sub New()
InitializeComponent()
Me.AutoScaleMode = AutoScaleMode.Dpi
Me.AutoSize = True
End Sub
或者,如果你需要知道这个信息,同时绘制(如在Paint
事件处理方法),可以提取来自Graphics
class实例的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
method使得这很容易做到;只需确保将此对象的创建包装在Using
statement中以避免内存泄漏。示例代码:
Dim dpiX As Single
Dim dpiY As Single
Using g As Graphics = myForm.CreateGraphics()
dpiX = g.DpiX
dpiY = g.DpiY
End Using
嗨,谢谢!但是,dpi与屏幕大小(X/Y)或字体大小(X仅限于可用)有关吗?换句话说,我可以确定在所有情况下dpiX = dpiY?否则,新的字体看起来会拉长,不是吗? – 2011-05-22 12:15:41
@Didier:是的,通常情况下,dpiX将相当于dpiY。如果不是,它会看起来很紧张。这取决于分辨率和用户选择的DPI设置。默认的小设置有dpiX = 96和dpiY = 96.默认大设置有dpiX = 120和dpiY = 120.您可以查看[此MSDN页面](http://msdn.microsoft.com/en-us/ library/dd464646.aspx)的高DPI应用程序。链接的[how-to页面](http://msdn.microsoft.com/en-us/library/dd464660.aspx)非常好。 – 2011-05-22 13:16:50
- 1. 如何检测用户的字体(DPI)?
- 2. css:设置字体图标的比例(其他字体大小)
- 3. CSS'font-size:medium'是否将字体设置为.Body字体大小或* browser *的基本字体大小?
- 4. QWebView与所有其他QWidgets相比DPI [字体大小]不同?
- 5. 账户谁设置他们的字体大或超大
- 6. 在高DPI设置下调整RichTextBox字体大小
- 7. 将小部件大小设置为其他大小的一半
- 8. 的Java Swing最小(或范围为)字体大小为其他应用
- 9. 浏览器默认字体大小是否依赖于DPI?
- 10. 的JTextPane:如何设置字体大小
- 11. 如何设置UITextView的字体大小?
- 12. 是否可以为NSString设置自定义字体和大小?
- 13. 如何设置字体大小FONT-FAMILY
- 14. Libgdx textfield:如何设置字体大小?
- 15. 如何检查字符串大小是否大于其容器的大小?
- 16. 检测safari高级设置:“从不使用小于...的字体大小”从JavaScript?
- 17. 检测字体是否是
- 18. 更改DPI时字体大小不变
- 19. 如何检测浏览器中的字体大小是否增加
- 20. PHPExcel:设置字体大小?
- 21. 设置字体大小
- 22. Lighttable,设置字体大小
- 23. GTK +设置字体大小
- 24. NSMutableAttributedString设置字体大小
- 25. 根据其帧大小设置UILabel字体大小?
- 26. 为DropDownListFor设置字体大小
- 27. 将字体大小设置为窗口
- 28. 如何检测$ _POST是否已设置?
- 29. 是他们的任何规则设置为图标/字体/等的大小。根据屏幕的大小
- 30. 如何检测我的其他应用是否由用户购买?
一个土生土长的方式(用Delphi编写的,但只使用本地的Windows API):'VAR DC:HDC; res:整数; 开始 dc:= GetDC(0);如果dc> 0,则 尝试 res:= GetDeviceCaps(dc,LOGPIXELSX); 终于 ReleaseDC(0,dc) end;' – 2011-05-21 15:46:09
正如Andreas所说,你也可以调用Windows API函数'GetDC'和'GetDeviceCaps'来获得这些信息,但是你必须使用P/Invoke从.NET应用程序中获取它们,这样做几乎没有什么好处,因为'Graphics'类已经在托管代码中很好地包装了它。 – 2011-05-21 15:53:41
但无论如何,**谢谢你[付税](http://blogs.msdn.com/b/oldnewthing/archive/2004/07/14/182971.aspx)** !! – 2011-05-21 15:54:31