2009-03-04 6 views
8

Это иерархия виджетов у меня есть:Как установить минимальный размер окна в wxWidgets?

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

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

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

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

ответ

6

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

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

1

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

2

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

12

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

+1

Не слишком поздно, чтобы ваш ответ поднимался! – dolmen