Несоответствие настроек DPI WPF Aero Glass - PullRequest
3 голосов
/ 13 января 2009

У меня есть приложение WPF, использующее Aero Glass. При использовании приложения с настройкой 120 точек на дюйм поля в моем пользовательском интерфейсе не совпадают с полями, которые я передаю вызову API DwmExtendFrameIntoClientArea.

Как получить параметр DPI системы в .NET 3.0, чтобы я мог исправить поле, передаваемое вызову API DwmExtendFrameIntoClientArea?

По сути, пользовательский интерфейс WPF использует независимые от устройства модули, тогда как вызов API DwmExtendFrameIntoClientArea использует пиксели.

Спасибо

1 Ответ

4 голосов
/ 13 января 2009

Хорошо, что-то вроде следующего решит проблему:

Public Shared Function GetDpiAdjustedMargins(ByVal WindowHandle As IntPtr, ByVal Left As Integer, ByVal Right As Integer, ByVal Top As Integer, ByVal Bottom As Integer) As Margins
    '
    Dim Graphics As System.Drawing.Graphics = System.Drawing.Graphics.FromHwnd(WindowHandle)
    Dim DesktopDPIx As Single = Graphics.DpiX
    Dim DesktopDPIy As Single = Graphics.DpiY

    Dim Margins As Margins = New Margins
    Margins.Left = Left * (DesktopDPIx / 96)
    Margins.Right = Right * (DesktopDPIx / 96)
    Margins.Top = Top * (DesktopDPIx / 96)
    Margins.Bottom = Bottom * (DesktopDPIx / 96)
    Return Margins
    '
End Function



Источник: Pro WPF в C # 2008 Мэтью Макдональд

...