1

私は と が初めて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 以降で新しく追加されました

4

1 に答える 1

0

残念ながら、DialogBlocks では実際にこのフラグを指定することはできません。それがなければLayout()、以前に隠されたコントロールを表示した後に呼び出す必要があります。これは、より多くのスペースが必要な子を収容するのに十分なスペースがある親で呼び出す場合に機能します (たとえば、最上位の親で呼び出すと常に機能します)。欲しいです。

于 2012-10-25T22:55:48.880 に答える