2009-03-04 15 views
8

これは私が持っているウィジェットの階層です。wxWidgetsで最小ウィンドウサイズを設定するにはどうすればよいですか?</p> <p>フレーム> wxBoxSizer> wxPanel> wxBoxSizer> wxFlexGridSizer(2列、9行)、内部の各種フォームフィールドやボタンで:

最初のBoxSizerはパネルを配置し、もう1つはFlexGridの周りに境界線を作成することです。

すべてがうまく見え、ウィンドウが拡大されているとフレームが適切に拡張されますが、フォームの要素がすべて隠れるようにほとんど変更されません。

デフォルトでは、すべてのフォーム要素が表示され、最小限のサイズを持つように、FlexGridSizerによって提案されたウィンドウの最小サイズを強制的に適用しますか?

答えて

6

FrameでSetMinSize()メソッドを使用して最小サイズを設定すると、フレームの最小領域に制限が設定されます(テスト済みです)。一旦設定されると、wxWidgetsはフレームを指定された値よりも小さくすることを許可しません。

このような値を設定します。コンストラクタで、フレームのすべての要素を設定します。最後に、Layout()メソッドを呼び出してすべてのサイザーなどを設定した後、GetSize(int *w, int *h)メソッドを呼び出して、フレームのxとyサイズをデフォルトのレイアウトで取得します。これらの値を使用してSetMinSize()メソッドを呼び出すと、フレームの最小サイズとしてそのデフォルトサイズが設定されます。これは、フレームと含まれる要素によって設定されたさまざまなパディングと境界線をすべて考慮に入れます。

1

wxFlexGridSizer->GetMinSize()が返すものであれば、私はwxFrame->SetMinSize(wxSize)を呼び出すよう試みますが、動作するはずですが、テストはしません。 GetMinSizeがウィンドウサイズをカバーすることについて、私が期待している通りに伝える前に、それを書き留めておく必要があります。

2

wxPerlでは、Layout()を呼び出した後に、の回答を $self->SetMinSize($self->GetSize());と簡潔に書き込むことができます。

12

恐らく遅すぎるかもしれませんが、答えは複雑であるため、SetSizerAndFit(sizer)に電話をかけて、サイザーとフレームを関連付け、初期サイズを設定し、このサイズを最小許容サイズに設定するだけです。

+1

あなたの答えがあがりすぎることはありません。 – dolmen

関連する問題