Після того, як ви перейдете 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