Значит спокойно объясняю суть проблемы: обычно никто размер шрифтов, выставленныйLavr wrote:Я готов объяснить эту проблему только в более спокойном ключе.Shaos wrote:И как этот размер может увеличивать нежирный фонт в два раза больше жирного?...
Дело в том, что настройка
Размер шрифта крупный: 125% обычного размера (120 dpi).
влияет на метрики Винды весьма глобально.
Об этом все забывают, и я чуть позже приведу пример, как серьёзно это влияет.
Виндой по умолчанию - не меняет.
При современных крупных (в пикселях) экранах все экранные надписи становятся довольно
мелкими и за день глаза устают. Поэтому я у себя ставлю настройку:

Вобще-то Венда при выборе этой настройки честно предупреждает, что некоторые программы
могут отображаться некорректно, и я лично об этом знаю - это следует учитывать при
программировании - но не все об этом знают в принципе.
Вот пример неплохой программы, автор которой об этой проблеме, похоже, совсем не знал.
Вот её внешний вид, когда шрифты выставлены обычные:

Теперь выставим:
Размер шрифта крупный: 125% обычного размера (120 dpi).
И программа поплыла...


Проблема вот в чем - Винда не может никаким способом определить - большой у меня
экран дисплея или маленький - но не в точках, а в реальном размере.
Поэтому авторы Винды сориентировались на весьма непоказательный фактор - если юзер
выставил крупные шрифты, значит у него физически большой экран.
А поскольку они тужились реализовать принцип Виз-Виг, то для якобы "реальной"
пропорциональности виндовая геометрия изменяется.
Там в МСДН где-то есть формулы, как они это пересчитывают, но вывод общий такой:
то, что было рассчитано в свои размеры в пикселях - на экране поплывёт...
Способы решения этой проблемы имеются - но мы же не о них здесь?
А вот автор приведенной выше программы писал её на VB, и в настройках своего
"графического конструктора" - выставил единицы - пиксели.
Вот всё и плывёт.
Кстати, этой болезнью не болеют модальные окна Венды - они почему-то делают нужную
коррекцию сами...
Но вот картинки - вставленные без "растяжки" (StretchBlt) - тоже теряют геометрию...

Вот типичный пример выше...