Как установить минимальный размер окна в wxWidgets?

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

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

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

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

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

4 ответов


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

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


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


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


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