Как определить, установлен ли шрифт (DPI) пользователя на маленький, большой или что-то еще? - PullRequest
7 голосов
/ 21 мая 2011

Мне нужно выяснить, установлен ли на экране пользователя обычный 96 dpi (маленький размер), большие шрифты 120 dpi или что-то еще. Как мне это сделать в VB.NET (предпочтительно) или C #?

Ответы [ 2 ]

13 голосов
/ 21 мая 2011

Способ best - просто позволить форме автоматически изменить свой размер в зависимости от текущих настроек DPI пользователя. Для этого просто установите для свойства AutoScaleMode значение AutoScaleMode.Dpi и включите свойство AutoSize. Вы можете сделать это либо из окна свойств в конструкторе, либо с помощью кода:

Public Sub New()
    InitializeComponent()

    Me.AutoScaleMode = AutoScaleMode.Dpi
    Me.AutoSize = True
End Sub

Или, если вам нужно знать эту информацию во время рисования (например, в методе обработчика событий Paint), вы можете извлечь информацию из DpiX и DpiY свойства Graphics класса экземпляра.

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
4 голосов
/ 21 мая 2011

Посмотрите на свойства DpiX и DpiY . Например:

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

В VB:

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