Вопрос или проблема
Я использую Windows 10. Некоторые устаревшие приложения отображают шрифты по-разному. Например:
Обратите внимание, как текст в строке заголовка “Управление компьютером” отображается иначе, чем внутренний текст. Не только сам шрифт различается, но и способ отображения, кажется, отличается (возможно, это субпиксельное сглаживание или что-то в этом роде).
Могу ли я заставить устаревшие приложения использовать современные методы отображения?
Насколько я знаю, оба используют устаревшую текстовую отрисовку GDI (т.е. не DirectWrite), и оба используют субпиксельное сглаживание. Даже шрифт, я полагаю, в обоих случаях один и тот же “Segoe UI”.
Разница в том, что строка заголовка отрисовывается компонентом, учитывающим DPI, который масштабирует свои размеры до отрисовки (например, до 125% или другого масштаба, установленного в Настройках отображения), тогда как сам MMC.exe не учитывает DPI – он отображает все в специфических пиксельных размерах, поэтому Windows приходится растягивать уже отрисованный битмап. Обратите внимание на слегка размытые иконки и стрелки и границы.
Если щелкнуть правой кнопкой по старому .exe и выбрать “Свойства”, затем “Совместимость”, обычно можно включить принудительное распознавание DPI, где встроенные виджеты Windows будут пытаться масштабировать свои координаты перед отображением. Иногда это работает, но иногда портит макеты – некоторые элементы управления могут перекрываться или выводиться за пределы экрана.
Я предполагаю, что MMC.exe не помечен как учитывающий DPI, потому что он просто является хостом для различных консольных “надстроек”, включая потенциально сторонние, которые сами по себе могут не работать с принудительным масштабированием.
.
Ответ или решение
Вопрос о том, как заставить наследственные приложения Windows 10 использовать современные методы рендеринга шрифтов, является актуальным в связи с тем, что современные и старые программы могут отображать текст по-разному. Хотя внешне это может быть незначительной проблемой, такие различия могут повлиять на удобочитаемость и общее восприятие интерфейса программы.
## Теория
Основой рендеринга текста в Windows является использование либо устаревшего API для графического интерфейса пользователя GDI (Graphics Device Interface), либо более современного DirectWrite. GDI, как правило, не поддерживает те же уровни сглаживания и создания более четких изображений шрифтов, как DirectWrite. GDI применяет метод подфункционального сглаживания, тогда как DirectWrite предлагает улучшенное субпиксельное антиалиасинг и поддержку различных экранных разрешений, делая текст более плавным и чистым.
Большинство современных приложений на Windows разработаны с использованием DirectWrite для рендеринга текста, предлагая более высокое качество отображения. Однако, такие приложения, как MMC.exe, по-прежнему используют GDI. Это часто приводит к нечеткому или нечётко растянутому тексту, особенно на экранах с высоким разрешением и превышающем 100% масштабом.
## Пример
Как упоминается в описании проблемы, различия в рендеринге шрифтов между заголовком окна и внутренним текстом MMC.exe связаны с тем, что заголовок эффективно рендерится компонентом, поддерживающим DPI (Dots Per Inch), который масштабирует свои размеры до рендеринга. По мере увеличения разрешения экрана значение DPI также увеличивается, требуя от приложений быть DPI-осведомленными для корректного отображения контента.
Проблема в том, что большинство старых приложений, включая MMC.exe, не имеют встроенной поддержки высокой DPI, и используется масштабирование уже отрендеренного битмапа, что приводит к получению размытого текста и графики.
## Применение
Пожалуй, наиболее прагматичным методом, который вы можете попробовать, является настройка параметров совместимости конкретного приложения для того, чтобы заставить Windows обрабатывать его как DPI-осознанное. Для этого можно сделать следующее:
1. Щелкните правой кнопкой мыши на .exe файл целевого приложения (например, для MMC.exe).
2. Перейдите на вкладку “Совместимость”.
3. Установите флажок “Переопределить поведение масштабирования высокого разрешения”. Это позволит Windows попробовать применять более продвинутые методы рендеринга.
Эти настройки могут помочь улучшить масштабирование текста и устранить размытие в некоторых приложениях. Однако стоит помнить, что, несмотря на потенциальные улучшения, такой подход не всегда приводит к успешным результатам. В некоторых случаях интерфейс может перейти в неподходящее состояние – контрольные элементы могут накладываться друг на друга или вовсе выходить за пределы экрана из-за ошибок в ранжировании элементов.
Кроме того, стоит учитывать, что некоторые приложения могут полагаться на встроенные компоненты и библиотеки, которые не поддерживают изменения рендеринга шрифтов. Например, MMC.exe, как менеджер консольных систем, возможно, не имеет встроенной настройки для работы с переключением DPI, потому что его задачей является хостинг множества “дополнений” (snap-ins), включая и те, что могут быть внешними или сторонними.
В данном случае, для полноценного перехода на современный рендеринг шрифтов может потребоваться модернизация самого приложения или использование более современных аналогов или версий, которые интегрируют поддержку DirectWrite. К сожалению, в некоторых случаях это может быть нереализуемо без обновлений от разработчиков программного обеспечения.
В будущем, чтобы избежать подобных проблем, разработчикам рекомендуется проектировать приложения с поддержкой современного рендеринга и осведомлением о DPI, что позволит им более гибко работать в различных средах отображения и улучшить пользовательский опыт.