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

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

например:

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

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

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

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

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

FOLLOW UP: я смотрю на предлагаемые решения. Многие из них требуют, чтобы ты пошла в якорь, каждый элемент управления в диалоговом окне. Я ищу что-то умное, что выяснит, какими должны быть якоря, с возможностью ручного якоря, если догадки неверны. Кажется, это должно быть возможно - большинство людей согласятся, что статическое текстовое поле рядом с полем редактирования должно быть закреплено вместе. Думаю, я почти ищу немного AI здесь:)

7 ответов


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


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

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


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


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


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


мы используем класс 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
Это просто набор простых макросов, которые управляют положением по мере изменения размера диалога.

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