Класс изменения размера диалогового окна Windows C++

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

Вопрос

Я ищу действительно хороший класс изменения размера диалога, который будет растягивать и сжимать отдельные элементы по мере необходимости при изменении размера экрана.У Стефана Кейла есть хороший вариант (DlgResizeHelper), который в основном изменяет размеры всего в заданном соотношении, но я ищу что-то поумнее.

Например:

  • Иконки не должны изменять размер

  • Однострочные текстовые поля не должны растягиваться по вертикали.

  • Кнопки, вероятно, должны оставаться того же размера.

По сути, я ищу что-нибудь, чтобы просмотреть все элементы управления, выяснить, что статическое текстовое поле связано с элементом управления рядом или под ним, и привязать их вместе, а также изменить размер больших элементов управления «умным» способом, чтобы оно выглядело хороший.

Существуют ли такие рамки?Я работал над одним, но что-то готовое, вероятно, было бы лучше.

СЛЕДОВАТЬ ЗА:Я рассматриваю предложенные решения.Многие из них требуют, чтобы вы привязали каждый элемент управления в диалоговом окне.Я ищу что-то умное, которое определит, какими должны быть привязки, с возможностью привязки вручную, если предположения неверны.Кажется, это возможно — большинство людей согласятся, что статическое текстовое поле рядом с полем редактирования должно быть привязано друг к другу.Думаю, я почти ищу здесь маленький ИИ :)

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

Решение

Вы можете использовать wxWidgets.Он полностью заменяет MFC, является мультиплатформенным и предоставляет механизм диалога на основе макета.

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

я использую ResizableLib (также работает с PropertySheets и Pages) вне codeproject, IIRC.Вы устанавливаете опорные точки, которые определяют, как диалоговое окно и элементы управления изменяют размер или перемещаются при перемещении диалогового окна.

Вы можете установить до двух привязок для каждого элемента управления (слева и справа), чтобы их можно было перемещать по мере перемещения диалогового окна или изменять их размер при его перемещении.Это очень легко понять, хотя сложно сделать все правильно :)

Я перепробовал много и наконец остановился на http://www.codeproject.com/KB/dialog/layoutmgr.aspx.Однако он не обеспечивает «интеллектуальную» компоновку, которую вы предлагаете.Я никогда не видел этого ни в одной библиотеке, ни на одной платформе - я не понимаю, как это будет работать без большого количества скрытой магии, которую все равно придется отключать в половине случаев.

Библиотека MFC Ultimate Toolbox (здесь на CodeProject) включает в себя менеджер по расположению.Я сам им не пользовался, но похоже, что он делает то, что вы хотите.

Вы можете посмотреть Профессиональный графический интерфейс мы используем их библиотеку классов для изменения размера элементов управления диалоговыми окнами.Я думаю, что это часть их бесплатной версии.

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

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

SetResize(IDC_EDIT1, 0,   0,   0.5, 1);
SetResize(IDC_EDIT2, 0.5, 0,   1,   1);

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

Исходный код

Это бесплатное решение также от CodeProject.
http://www.codeproject.com/KB/dialog/dlgresizearticle.aspx
Это всего лишь набор простых макросов, которые позиционируют элементы управления при изменении размера диалогового окна.

Изменить - следуя комментариям ОП.Я не знаю какой-либо общей поддержки размеров, такой как QT/WX для MFC, похоже, она также не присутствует в новых платформах, таких как Winforms.
Он есть в QT/WX, потому что это необходимо для мультиплатформенности, где виджеты могут быть разного размера, что объясняет его отсутствие в MS.Но это также важно для многоязычных портов, например.где в немецком языке слово «отмена» имеет длину 30 символов.

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