Разработка приложения MFC, которое будет работать на всех разрешениях? - PullRequest
4 голосов
/ 26 июня 2009

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 26 июня 2009

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

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

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

2 голосов
/ 26 июня 2009

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

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

  • Перепроектируйте ваш графический интерфейс, чтобы использовать графический интерфейс SDI или MDI.
  • Использовать расширение для изменения размера диалога. Есть много доступных, для некоторых очень хороших предложений см. этот вопрос . Другие варианты это и это .
  • Не используйте MFC. У wxWidgets гораздо лучшая поддержка изменения размера диалогов.
1 голос
/ 26 июня 2009

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

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

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

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

...