2015-12-07 3 views
-2

Как получить разрешение экрана? Дело в том, что если вы измените параметр масштабирования в настройках метода ОС, то Screen.AllScreens[screenIndex].Bounds.Width дает неправильное разрешение. Проблема возникает в дисплеях 4k. Помогите решить. Заранее большое спасибо!Получение разрешения экрана

private static Rectangle GetScreenRect(int screenIndex) 
    { 
     Rectangle screenRect = new Rectangle(); 
     screenRect.Size = new Size((Screen.AllScreens[screenIndex].Bounds.Width, Screen.AllScreens[screenIndex].Bounds.Height); 
     screenRect.Location = new Point(Screen.AllScreens[screenIndex].Bounds.X, Screen.AllScreens[screenIndex].Bounds.Y); 
     return screenRect; 
    } 

P.S: Я использую только .NET 2.0.

+2

Пожалуйста, поделитесь своим кодом. –

+0

проверить это http://stackoverflow.com/questions/5082610/get-and-set-screen-resolution –

+2

Каков результат и что вы ожидали? –

ответ

1

Это не неправильный результат :)

Это часть слоя совместимости, чтобы разрешить старые приложения для запуска относительно хорошо в системах с высоким DPI. Ваше приложение не говорит Windows, что оно новое и достаточно крутое, чтобы хорошо его обрабатывать, поэтому Windows делает вид, что его экраны меньше, чем они есть на самом деле - это позволяет вашему приложению отображать как обычно, в то время как Windows обрабатывает приложение достаточно большим, чтобы удобно используемый.

Истина заключается в том, что Winforms на самом деле была хорошей структурой, позволяющей обрабатывать несколько DPI (и локализацию и т. Д.), На самом деле это не было . Таким образом, большинство приложений так же глупы, как, скажем, приложения старой школы MFC - они просто не масштаб хорошо.

В самом деле, ваших применения именно поэтому существуют те слои совместимости - вы еще с использованием .NET 2.0, долго после того, как он устарел (и я предполагаю, что вы до сих пор поддерживаете Windows XP, а) , Если Windows не лжет вашему приложению, это было бы абсолютно непригодным, с текстами, чтобы читать их (или контролируется случайным образом, когда некоторые автомасштабируют, а другие нет).

Теперь, если вы чувствуете, что ваше приложение фактически в состоянии справиться с DPI масштабировании правильно (если вы не дизайн это сделать, это, вероятно, нет), вы можете использовать функцию SetProcessDpiAwareness сказать Windows, что вам не нужна эта сладкая ложь - вы можете справиться с масштабированием, спасибо. У этого есть много преимуществ (все будет выглядеть намного острее), но это означает, что вам нужно будет исправить свое масштабирование повсюду. Обратите внимание, что эта функция вообще не существует в Windows pre-6 (которая не выполняет коррекцию DPI), и вам нужно использовать SetProcessDPIAware в Windows 6+ (SetProcessDpiAwareness - это Windows 8.1+).

Смежные вопросы