Проектируете приложение MFC, которое будет работать на всех разрешениях?

StackOverflow https://stackoverflow.com/questions/1046494

Вопрос

В настоящее время я разрабатываю свой первый графический интерфейс для Windows.Я использую MFC и Visual Studio 2008.Монитор, на котором я разрабатывал свою программу, имеет собственное разрешение 1680x1050.Если я скомпилирую и отправлю свою программу одному из моих коллег для запуска на его компьютере (обычно это ноутбук с разрешением 1024x768), моя программа не поместится на его экране.

Я пытался прочитать о том, как разработать приложение MFC, чтобы оно работало на всех разрешениях, но продолжаю находить вводящую в заблуждение информацию.Куда бы я ни посмотрел, кажется, что DLU должны изменять размер вашего приложения за вас, и что единственный раз, когда вы можете столкнуться с проблемами, это когда у вас есть фактическое растровое изображение, о разрешении которого вам нужно беспокоиться.Но если это так, то почему моя программа больше не помещается на моем экране, когда я устанавливаю на мониторе более низкое разрешение?Вместо того, чтобы моя программа «сжималась», чтобы занять тот же объем экрана, который она использует при разрешении 1680x1050, она становится огромной и зернистой.

«Очевидное» решение здесь — установить разрешение 1024x768 и перепроектировать мою программу так, чтобы она поместилась на экране.За исключением того, что я уже максимально сжал все в своих диалогах, чтобы попытаться уместить мою программу на экране с разрешением 1024x768.Шрифты моих диалогов установлены на Microsoft Sans Serif 8, но при разрешении 1024x768 они по-прежнему кажутся огромными (намного больше 8 пунктов).

Я знаю, что ДОЛЖЕН быть способ заставить мою программу сохранять такое же масштабирование...верно?Или это неправильный подход к проблеме?Каков правильный/стандартный способ разработки программы MFC, чтобы она могла работать во многих разрешениях, скажем, 800x600 и выше?

Это было полезно?

Решение

Я предполагаю, что графический интерфейс вашего приложения основан на диалоге (главное окно представляет собой диалог)?

В этом случае у вас возникла проблема, поскольку, как вы обнаружили, MFC не поддерживает правильное изменение размера диалогового окна.Ваши варианты:

  • Перепроектируйте свой графический интерфейс, чтобы использовать графический интерфейс SDI или MDI.
  • Используйте расширение для изменения размера диалога.Их много, некоторые очень хорошие предложения см. этот вопрос.Другие варианты: Вот этот и Вот этот.
  • Не используйте МФЦ.wxWidgets имеет гораздо лучшую поддержку изменения размера диалогов.

Другие советы

MFC — это всего лишь тонкая оболочка над Windows API.Они оба делают предположение, которое вряд ли когда-либо соответствует действительности:Если у вас экран с более высоким разрешением, вы отрегулируете DPI или размер шрифта в Windows, чтобы получить символы большего размера.В большинстве случаев больший размер экрана означает больший физический монитор или ноутбук, на котором вы хотите вместить как можно больше информации на маленький экран;люди ценят больше информации, а не больше деталей.Таким образом, предположение терпит неудачу.

Если вы не можете втиснуть весь свой пользовательский интерфейс на экран минимального размера, который вам нужен, вам придется найти другой способ сделать его меньше.Не зная ничего о вашем пользовательском интерфейсе, я мог бы предложить использовать вкладки для группировки элементов управления на страницы.

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

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

Опция 1.Если вы разрабатываете свое приложение для клиентов, выберите одно минимальное разрешение (например, 1024x7678), измените дизайн диалогов так, чтобы все подходило.Возможно, разобьете некоторые из них на несколько или используйте панель вкладок.

Вариант 2.Создавайте отдельные диалоговые формы для каждого разрешения, которое вы хотите поддерживать, но для его обработки используйте один и тот же класс.Во время выполнения определите разрешение и используйте соответствующую форму.

Вариант 3.Напишите свою собственную функцию изменения размера, чтобы пользователь мог регулировать размер ваших диалогов по своему вкусу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top