C#, Winforms, .manifest: Как определить Scale?

Уважаемые господа,

я пытаюсь в приложении (C#, .NET Framework 4.8 под Windows 10) определить параметр Scale - показан на картинке.

scale

Предыстория вопроса: хочу заставить приложение работать одинаково, несмотря на то, как у пользователя установлен этот параметр.

После многих экспериментов я понял, что единственный способ написать такое приложение - сделать, чтобы независимо от Scale у меня всегда рисовалось окно из одного и того же числа точек на экране.

То есть, фактически, я хочу сам управлять тем, как у меня будет отрисовано окно приложения.

Прописав приложению так называемый manifest-файл, точнее, добавив в него такую секцию:

  <application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings>
        <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">True/PM</dpiAware>
        <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2,PerMonitor</dpiAwareness>
      <longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
    </windowsSettings>
  </application>

я добился того, что окно приложения, независимо от установок Scale, рисуется - в точках - одинакового размера.

Но при этом изменяются размеры шрифта, которым сделаны надписи в форме, пример на следующих двух картинках, соответсвующих scale=100% и scale=125%:

100%

125%

Я попробовал определить установленный scale (для того, чтобы "вручную" подправить размер шрифта), и убедится, что первые несколько примеров, найденных на SO, не работают, всегда выдавая мне результат "у тебя установлен Scale 100%".

Что я пробовал:

  1. наивный способ отсюда

  2. чуть более замороченный способ отсюда

  3. способ, который ну должен уже работать, суда по фундаментальности подхода, отсюда

Сам проект, который можно загрузить и запустить, лежит здесь (гитхаб)

Код из примеров вставлен прямо в Program.cs, и вызывается из единственной формы в событии Shown.

Нельзя ли навести меня на правильный способ определения scale в таком приложении?

Спасибо большое!


Ответы (0 шт):