10

これは私が持っているウィジェットの階層です:

フレーム > wxBoxSizer > wxPanel > wxBoxSizer > wxFlexGridSizer (2 列、9 行) で、内部にさまざまなフォーム フィールドとボタンがあります。

最初の BoxSizer はパネルを配置するためのもので、2 つ目は FlexGrid の周囲に境界線を作成するためのものです。

すべてが見栄えがよく、ウィンドウを拡大するとフレームが適切に拡大されますが、サイズをほとんど変更できず、すべてのフォーム要素が非表示になります。

ウィンドウの最小サイズをデフォルトで FlexGridSizer によって提案されたものに強制するにはどうすればよいですか (すべてのフォーム要素が表示され、可能な最小サイズを持つ)。

4

4 に答える 4

18

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

于 2010-02-12T22:02:02.573 に答える
6

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

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

于 2009-03-05T18:30:33.367 に答える
2

wxPerl では、dagorym$self->SetMinSize($self->GetSize());の回答はを呼び出した後のように簡潔に記述できます Layout()

于 2009-03-10T07:29:14.007 に答える
1

wxFlexGridSizer->GetMinSize()が返すもので wxFrame- >SetMinSize(wxSize)を呼び出してみてください。動作するはずですが、テストされていません。期待どおりに渡す前に、ウィンドウサイズへの変換について GetMinSize が何を言っているかに注意する必要があります。

于 2009-03-04T20:48:13.950 に答える