私は と が初めてwxWidgets
ですDialogBlocks
。DialogBlocks を使用して作成され、XRC ファイルとして保存されたフォームがあります。フォームの一部には、2 つの要素wxStaticBoxSizer
が配置された垂直があります。wxScrolledWindow
ユーザーに表示するデータに基づいて一度に 1 つだけ表示したいので、1 つを非表示にし、もう 1 つを表示したままにします。表示を切り替えて、XRC で非表示だったウィジェットを表示し、非表示だったウィジェットを非表示にすると、非表示にしたウィジェットは正常に表示されなくなりますが、表示したいウィジェットが表示されません。ただし、ウィンドウのサイズを変更すると表示されます。表示されたら、問題なく前後に切り替えることができます。表示、有効化、無効化、サイザーの取得、および呼び出しの多くの組み合わせを試しましたRecalcSizes
、リフレッシュ、レイアウトなど。私もいろいろな組み合わせで試してみました。呼び出すだけShow
で 2 つを切り替えることができますが、最初に表示されていないものに切り替えてウィンドウのサイズを変更した後でのみ可能です。ドキュメントで見たものから。問題は、wxSizer
非表示のウィンドウにスペースを割り当てないことですが、その動作をオーバーライドするように設定できるフラグがあります。私の問題は、DialogBlocks がその機能を公開していないことです。そのため、XRC ファイルを手動で編集すると、私または他の開発者の 1 人が変更を保存すると、変更が失われます。サイザーにスペースを割り当てるように指示する一連の呼び出しはありますか? デフォルトのOnResize
ハンドラーは、サイザーにスペースを割り当てさせるために何かを行いますが、それが何であるか、またはそれを行う方法がわかりません。
これは、ドキュメントで見つけたフラグです。
wxRESERVE_SPACE_EVEN_IF_HIDDEN 通常、wxSizers は非表示のウィンドウやその他のアイテムにスペースを割り当てません。このフラグは、ウィンドウが表示されていない場合でもウィンドウに十分なスペースが割り当てられるように、この動作をオーバーライドします。これにより、たとえば、親ダイアログのサイズを変更することなく、コントロールを動的に表示および非表示にすることができます。この関数は wxWidgets バージョン 2.8.8 以降で新しく追加されました