powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / что происходит с текстом? почему он получается размытым?
17 сообщений из 17, страница 1 из 1
что происходит с текстом? почему он получается размытым?
    #39336057
FB Programmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пользуюсь windows forms. в design-time текст на форме - четкий, в run-time - размытый. я знаю, что форма масштабируется. пробовал с разными AutoScaleMode, в том числе и с None - не помогает. в wpf такого нет, но wpf мне не подходит из-за визуального наследования.
...
Рейтинг: 0 / 0
что происходит с текстом? почему он получается размытым?
    #39336360
FB Programmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нашел ответ
How to configure an app to run correctly on a machine with a high DPI setting (e.g. 150%)?
в манифесте включаем dpiAware:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<?xml version="1.0" encoding="utf-8"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
    <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
            <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
                <requestedExecutionLevel level="asInvoker" uiAccess="false" />
            </requestedPrivileges>
        </security>
    </trustInfo>
    <asmv3:application>
        <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
           <dpiAware>true</dpiAware>
        </asmv3:windowsSettings>
    </asmv3:application>
</assembly>


или в коде:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 
    [STAThread]
    static void Main() {
        if (Environment.OSVersion.Version.Major >= 6) SetProcessDPIAware();
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());             // Edit as needed
    }

    [System.Runtime.InteropServices.DllImport("user32.dll")]
    private static extern bool SetProcessDPIAware();


как-то так :)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
что происходит с текстом? почему он получается размытым?
    #39879357
AlexV1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мой App:
.Net Framework 4.5.2
WinForms
Пишу под Windows 10 в Visual Studio 2019

Что то никак не получается сделать поддержку 4K-мониторов в своем приложении и чтобы не пушились буквы на форме при задирании масштаба до 150% в винде 10.

Много перечитал рецептов, но

Требование:
- Сделать четкое масштабирование шрифта и эл-тов интерфейса при увеличении масштаба в система до 125%, 150%.
- Сделать на уровне Манифеста (не вызовом WinAPI), не спрашивайте почему.
- И чтобы корректно мастабировалось и в Win 10 и в более ранних Windows, вплоть до Win7

Не предлагайте пожалуйста перейти на Framework 4.7 или WPF.

Может кто решил такую задачу и сможет поделиться куском app.manifest - файла?

Пробовал так

В проект добавил файл манифеста и прописал его в св-вах проекта.
AutoScaleMode = Font (по-умолч).

Сам манифест ниже

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="asInvoker" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>


  <asmv3:application>
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
      <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
      <dpiAware>True</dpiAware>
    </asmv3:windowsSettings>
  </asmv3:application>

...
</assembly>


С данным манифестом форма не масштабируется вообще.
Если убрать строку
Код: xml
1.
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>


то масштабируется, но криво - буквы пушатся (размытые).

В идеале настроить манифест, чтобы на форме было все четко, но все эл-ты были смасштабированы в соотв-ии с текущим DPI.
...
Рейтинг: 0 / 0
что происходит с текстом? почему он получается размытым?
    #39879370
AlexV1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexV1,
вот собственно исходник
...
Рейтинг: 0 / 0
что происходит с текстом? почему он получается размытым?
    #39879390
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сдается мне, что тут обладателей 4к мониторов не так много
...
Рейтинг: 0 / 0
что происходит с текстом? почему он получается размытым?
    #39879397
AlexV1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes,

Да, но мне бы хоть добиться, чтобы не размывался текст при выставлении масштаба 150% в Windows 10.
Тогда и скорее всего на 4K-мониторах заработает.

Есть один человек, у которого 4K, просто за каждым чихом не хочется тревожить его, и так поднадоел я ему уже :-)
...
Рейтинг: 0 / 0
что происходит с текстом? почему он получается размытым?
    #39879480
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видать не только игроделы режут перед релизом графон, но и десктопщики.
...
Рейтинг: 0 / 0
что происходит с текстом? почему он получается размытым?
    #39879491
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexV1,

может AutoScaleMode = DPI надо?
...
Рейтинг: 0 / 0
что происходит с текстом? почему он получается размытым?
    #39879519
AlexV1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ViPRos,

пробовал. Не помогло.
...
Рейтинг: 0 / 0
что происходит с текстом? почему он получается размытым?
    #39879526
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexV1,

у меня ничего не размыто
...
Рейтинг: 0 / 0
что происходит с текстом? почему он получается размытым?
    #39879547
AlexV1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ViPRos,

А скриншот можно?
Это с AutoScaleMode = DPI или Font ?
При каком масштабе, выставленном в Windows ?
...
Рейтинг: 0 / 0
что происходит с текстом? почему он получается размытым?
    #39879548
AlexV1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ViPRos,
и при этом форма увеличена в размерах (смасштабировалась) ?
...
Рейтинг: 0 / 0
что происходит с текстом? почему он получается размытым?
    #39879557
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а на форме?ViPRosAlexV1,

у меня ничего не размыто
...
Рейтинг: 0 / 0
что происходит с текстом? почему он получается размытым?
    #39879561
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexV1,
...
Рейтинг: 0 / 0
что происходит с текстом? почему он получается размытым?
    #39879586
AlexV1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ViPRos,

1) У вас 4K (монитор высокого разрешения)?
2) Попробуйте с в-вах проекта в разделе Application временно переключить Manifest на Embed manifest и запустите программу. Изменилось что то?
...
Рейтинг: 0 / 0
что происходит с текстом? почему он получается размытым?
    #39879601
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexV1,

С манифестом по умолчанию то же все нормально.
3К у ноута.
...
Рейтинг: 0 / 0
что происходит с текстом? почему он получается размытым?
    #39879675
AlexV1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Начиная с Windows 10 версии ядра 1803 на закладке "Дисплей" теперь есть ссылка "Дополнительные параметры масштабирования", кликнув по которой откроется окно, где можно включить "Разрешить Windows исправлять размытость в приложениях".
см.картинку

У кого есть - работает (и масштабируется и четкость шрифтов и эл-тов при этом).

У меня же Windows 10 версия ядра 1709, потому и нет этой опции в "Дисплей".
Вот я никак и не могу добиться четкости - ни манифестом, ни вызовом WinAPI функции SetProcessDPIAware();
Обновлю Windows, тогда хоть в 10-ке будет норм.

Также пробовал выставлять поочередно разные значения AutoScaleMode - идеального варианта не нашел, оставил то, что по-умолчанию, то есть Font.

Кстати, о том, как проверить корректно ли работает масштабирование.
Если при задранном масштабе > 100% в винде код ниже выдает 96, значит не работает масштабирование.
Если выдает > 100% и при этом четкие буквы и не съезжают контролы - это идеальный вариант. Пробуйте у себя.

Код: c#
1.
2.
3.
4.
5.
6.
using (Graphics graphics = Graphics.FromHwnd(IntPtr.Zero))
{
   float dpiX = graphics.DpiX;
   float dpiY = graphics.DpiY;
   MessageBox.Show(dpiX + ", " + dpiY);
}


В общем, тему можно закрыть. Кому еще актуально можете продолжить.
Спасибо за подсказки.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / что происходит с текстом? почему он получается размытым?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]