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