ユーザーの操作に基づいてコンテンツを変更する静的テキスト コントロールがあります。これは、他のいくつかのコントロールを備えた水平方向のサイザーにあります。テキストが変更されると、コントロールはそのサイズを動的に更新しますが、サイザーでの位置を動的に調整しません。つまり、メイン ウィンドウのサイズを手動で変更するまで、兄弟コントロールと重なってしまい、その後、すべてが再び適切に表示されます。
すべてが収まるようにサイザーを自動的に再調整するにはどうすればよいですか?
Layout()
最も簡単な方法は、によって返される最上位のウィンドウの親を呼び出すことwxGetTopLevelParent()
です。これは、再レイアウトが多すぎる可能性があるため、最も効率的な方法ではありません。また、サイズを更新する必要があるサイズを変更したウィンドウを含む最も深いサイザーまたはウィンドウにレイアウトを制限することができますが、これも繰り返します。 TLWレベルでの最も簡単な方法です。
わかりました。Stackoverflow は、私の回答を含む他のいくつかの質問を指摘してくれました。サイザーで Layout() を呼び出す必要があります。しかし、それはそれほど単純ではありませんでした。GUI に xrc ファイルを使用していましたが、sizer のハンドルを取得する方法がわかりませんでした。コントロールで GetContainingSizer() を呼び出すことができることを知るまでは。
しかし、それはそれほど単純ではありませんでした。
wxWidgets を初めて使用し、この問題を解決するためにさまざまな方法を試した結果、静的テキスト コントロールを独自のサイザーに配置し、隣接するボタンを 1 つのサイザーに配置し、これらすべてのサイザーを水平ボックス サイザーに配置しました。
これらの余分なサイザーを取り除き、1 つの水平線のすべての兄弟を制御します。ボックスサイザーは機能しました...ほぼ!しかし、それはそれほど単純ではありませんでした。
兄弟コントロールは正常に流れていましたが、含まれているサイザーがその領域の中央に配置されていませんでした。つまり、コントロールが中央から右にずれていました。そのため、サイザーを含む次の場所に行かなければなりませんでした。しかし、持っていたサイザーで GetContainingSizer() を呼び出すことができなかったので、サイザーの兄弟であるコントロールを取得し、その上で GetContainingSizer() を呼び出す必要がありました。そして、そのサイザーでレイアウトを行っている限り、すべてうまくいきました! 本当に簡単です。