После того, как вы превысите 100% (или 125% с установленным флажком «Масштабирование DPI в стиле XP»), Windows по умолчанию берет на себя масштабирование вашего пользовательского интерфейса. Это достигается за счет того, что ваше приложение отображает вывод в растровое изображение и выводит это растровое изображение на экран. Изменение масштаба этого растрового изображения неизбежно делает текст нечетким. Функция, называемая «виртуализация DPI», позволяет использовать старые программы на мониторах с высоким разрешением.
Вы должны явно сообщить ему, что можете обрабатывать более высокие настройки DPI, добавив <dpiAware>
элемент в свой манифест. Страница MSDN находится здесь, но она не завершена, так как не содержит настроек UAC. Проект + Добавить новый элемент, выберите «Файл манифеста приложения». Отредактируйте текст манифеста или скопируйте / вставьте это:
<?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>
Вы также можете закрепить SetProcessDPIAware () в своем методе Main (), например, если вы выполняете развертывание с помощью ClickOnce:
[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();
ОБНОВЛЕНИЕ, эта общая потребность, наконец, немного проще, если вы используете VS2015 Update 1 или выше. В добавленном манифесте уже есть соответствующая директива, просто удалите комментарии.
Ключевое слово для поиска, чтобы я мог найти этот пост обратно: dpiAware