Класс изменения размера диалогового окна Windows C ++ - PullRequest
6 голосов
/ 28 сентября 2008

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

Например:

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

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

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

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

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

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

Ответы [ 7 ]

2 голосов
/ 28 сентября 2008

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

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

2 голосов
/ 29 сентября 2008

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

1 голос
/ 28 сентября 2008

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

0 голосов
/ 28 сентября 2008

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

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

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

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

Исходный код

0 голосов
/ 28 сентября 2008

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

0 голосов
/ 28 сентября 2008

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

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

0 голосов
/ 28 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...