2009-03-04 3 views
8

이것은 내가있어 위젯의 계층 구조입니다 :wxWidgets에서 최소 윈도우 크기를 어떻게 설정합니까?

프레임> wxBoxSizer> wxPanel> wxBoxSizer> wxFlexGridSizer 내부 분류 된 양식 필드와 버튼 (2 열, 9 행).

첫 번째 BoxSizer는 패널을 배치하고 두 번째 Box는 FlexGrid 주위에 테두리를 만드는 것입니다.

모든 것이 멋지게 보이며 창이 확대되면 프레임이 제대로 확장 될 수 있지만 모든 양식 요소가 숨겨져 거의 아무것도 표시되지 않도록 크기를 조정할 수도 있습니다.

기본적으로 FlexGridSizer에서 제안한 폼의 최소 크기 (모든 폼 요소가 표시되고 크기가 최소 임)는 어떻게합니까?

답변

6

프레임에서 SetMinSize() 메서드를 사용하여 최소 크기를 설정하면 프레임의 가장 작은 영역에 대한 제한이 설정됩니다. 일단 설정되면 wxWidgets는 프레임이 지정된 값보다 작게 크기를 허용하지 않습니다.

이렇게 값을 설정했습니다. 생성자에서 프레임의 모든 요소를 ​​설정합니다. 마지막으로 Layout() 메서드를 호출하여 모든 크기 조절기 등을 설정 한 다음 GetSize(int *w, int *h) 메서드를 호출하여 프레임의 x 및 y 크기를 기본 레이아웃으로 가져옵니다. 이 값을 사용하여 SetMinSize() 메서드를 호출하여 기본 크기를 프레임의 최소값으로 설정합니다. 이것은 프레임과 포함 된 요소에 의해 설정된 모든 다양한 패딩과 테두리를 고려합니다. wxPerl에서

1

무엇이든 wxFlexGridSizer->GetMinSize()이 반환되면 어떤 식 으로든 wxFrame->SetMinSize(wxSize)을 호출하려고합니다. 테스트해야하지만 작동하지 않아야합니다. GetMinSize가 예상 한대로 전달하기 전에 윈도우 크기에 대한 커버리지에 대해 언급 할 필요가 있음을 알아야합니다.

2

, dagorym의 대답은 Layout()를 호출 한 후 $self->SetMinSize($self->GetSize());으로 간결하게 작성할 수 있습니다.

12

아마 너무 늦기는하지만 여기에 나온 대답은 불필요하게 복잡합니다. SetSizerAndFit(sizer)을 호출하여 sizer와 프레임을 연결하고 초기 크기를 설정하고이 크기를 최소 허용 크기로 설정하면됩니다.

+1

너무 늦어서 답변을 올릴 수 없습니다. – dolmen