Запретить приложению wxWidgets масштабирование размеров при более высоком разрешении на дюйм

Я пишу приложение wxWidgets (3.1.0), которое должно работать на Windows и Mac. В окнах, когда я устанавливаю масштабирование текста более чем на 100%, размеры моих элементов управления искажаются. У меня есть манифест dpi, в котором говорится, что мое приложение поддерживает dpi. Я также устанавливаю размер шрифта в пикселях в своих диалогах, и это работает до некоторой степени. Когда я устанавливаю размер некоторого элемента из кода, он изменяется до того размера в пикселях, который мне нужен, но любой размер, установленный в файле xrc, увеличивается. Также, когда я пытаюсь уменьшить размер любого wxSpinCtrl, он может быть уменьшен до некоторой точки, но тогда только текстовое поле становится меньше, а кнопки остаются непропорционально большими. Итак, есть ли способ сказать моему приложению, чтобы оно не масштабировало какие-либо размеры, а просто позволяло всем иметь точно такой же размер пикселя, как и при обычном dpi (несмотря на тот факт, что мое приложение будет выглядеть маленьким при более высоких разрешениях)?


person Milan    schedule 26.06.2016    source источник
comment
Вы пытались удалить информацию о dpi из файла манифеста?   -  person Igor    schedule 27.06.2016
comment
@Igor Если я удалю манифест, Windows использует масштаб по умолчанию, из-за чего все выглядит размытым.   -  person Milan    schedule 27.06.2016
comment
Это очень странный вопрос, почему именно вы сознательно хотите, чтобы ваша программа выглядела плохо на экранах с высоким разрешением? Настоящее решение — решить проблему, какой бы она ни была. К сожалению, все перепутано недостаточно точно, чтобы понять, что это такое.   -  person VZ.    schedule 27.06.2016
comment
@ВЗ. Под испорченным я подразумеваю, что если я установлю что-то шириной 300 пикселей, оно будет иметь ширину 375 пикселей при масштабировании 125% и ширину 450 пикселей при масштабировании 150%, но я хочу, чтобы оно всегда было шириной 300 пикселей, независимо от масштабирование   -  person Milan    schedule 27.06.2016
comment
Это не перепутано, это правильно масштабировано, и если это все, что происходит, я до сих пор не понимаю, почему это проблема.   -  person VZ.    schedule 27.06.2016
comment
@ВЗ. Проблема в том, что где-то в процессе принятия решения кто-то сказал: «Давайте игнорировать настройки масштабирования пользователя и не масштабировать его», и я застрял на этом. Поэтому мне просто нужно знать, можно ли отключить это масштабирование, и если да, то как я могу это сделать?   -  person Milan    schedule 27.06.2016
comment
Обычно вы пытаетесь сделать как можно больше макета с помощью сайзеров, и сайзеры попытаются сделать макет согласованным, если шрифт по умолчанию/размер шрифта по умолчанию/визуальный стиль/скорость dpi/... изменились. Если этого недостаточно, вы можете создать контекст рисования и измерить, насколько большим будет определенный фрагмент текста, и использовать его как ширину, которую вы можете использовать в качестве ширины кнопки или столбца таблицы.   -  person Gunter Königsmann    schedule 16.08.2018


Ответы (1)


Невозможно предотвратить применение надлежащего масштабирования с помощью wxWidgets API, и я не думаю, что это изменится, потому что это просто не имеет никакого смысла.

Однако перестроение wxWidgets с определенным wxHAVE_DPI_INDEPENDENT_PIXELS должно обмануть библиотеку, заставив ее думать, что базовый графический инструментарий уже масштабирует значения пикселей и, таким образом, помешает ей сделать это самостоятельно. Я никогда не проверял это, но, AFAICS, это должно привести к тому, что вы хотите.

Тем не менее, позвольте мне повторить, что то, что вы хотите, совершенно неправильно, и реальное решение этой проблемы состоит в том, чтобы объяснить это тому, кто решил это сделать.

person VZ.    schedule 27.06.2016