Как установить минимальный размер окна в wxWidgets? - PullRequest
8 голосов
/ 04 марта 2009

Это иерархия виджетов, которые у меня есть:

Frame> wxBoxSizer> wxPanel> wxBoxSizer> wxFlexGridSizer (2 столбца, 9 строк), с различными полями формы и кнопками внутри.

Первый BoxSizer предназначен для размещения панели, а второй - для создания границы вокруг FlexGrid.

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

Как установить минимальный размер окна в соответствии с тем, который предлагается FlexGridSizer по умолчанию (все элементы формы видимы и имеют минимально возможные размеры)?

Ответы [ 4 ]

13 голосов
/ 13 февраля 2010

Возможно, слишком поздно, но ответы, приведенные здесь, излишне сложны, вам просто нужно позвонить SetSizerAndFit(sizer), чтобы связать классификатор с рамкой, установить его начальный размер, а также установить этот размер как минимально допустимый размер.

6 голосов
/ 05 марта 2009

Использование метода SetMinSize () в вашем фрейме для установки минимального размера установит ограничение на наименьшую площадь фрейма (только что проверил). После установки wxWidgets не позволит размеру фрейма меньше указанного значения.

Я бы установил значение следующим образом. В конструкторе настройте все элементы фрейма. В конце, после того, как вы вызовете метод Layout() для настройки всех размеров и тому подобного, вызовите метод GetSize(int *w, int *h), чтобы получить размеры x и y вашего кадра в макете по умолчанию. Используйте эти значения для вызова метода SetMinSize(), чтобы установить этот размер по умолчанию как минимальный для вашего фрейма. При этом будут учтены все различные отступы и границы и такие, которые установлены рамкой и содержащимися элементами.

2 голосов
/ 10 марта 2009

В wxPerl, дагорым ответ можно записать кратко как $self->SetMinSize($self->GetSize()); после звонка на Layout().

1 голос
/ 04 марта 2009

Я бы попытался вызвать wxFrame-> SetMinSize (wxSize) с любыми значениями wxFlexGridSizer-> GetMinSize () , должно работать, но не проверено. Вы должны будете отметить, что GetMinSize говорит о покрытии до размера окна, прежде чем передать его, я ожидаю.

...