私のアプリケーションを古い GUI (固定サイズを使用していた場所) から wxWidgets (サイザーの基礎を学ぼうとしている場所) に移動しています。
アプリケーション内には、非常に複雑な構造を持つフォームがいくつかあります。データとワークフローの性質から、これらすべてのデータを 1 つの画面にまとめることが推奨されます。しかし、この画面は使いやすいように適切に設計する必要があります。
これが旧バージョンのフォームです...
...そして、これが多かれ少なかれ、サイザーを使用して思いつくことができるものです...
wxGridSizer を単純に使用することはできないことに注意してください。一部のウィジェットは行全体にまたがり、他のウィジェットは固定グリッドの外に出てしまうなどです。
明らかに、見苦しさを軽減するために作業を続けることができましたが、サイザーはそれを行うための正しいツールではないのではないかと考えていました. 私が望むものを達成するには、ある種の colspan/rowspan メカニズムを備えた wxGridSizer に似たものが必要ですが、それでは十分ではないかもしれません。
そこで、次のような「フォームサイザー」を自分で作ろうと考え始めました。
int w,h;
GetClientSize(&w,&h);
MyFormSizer *formSizer(w,h);
formSizer->SetDimension( widget1, 100, 20 );
formSizer->SetDimension( widget2, 500, 20 );
formSizer->newRow();
formSizer->SetDimension( widget3, 100, 20 );
formSizer->SetDimension( widget4, 250, 20 );
formSizer->SetDimension( widget5, 250, 20 );
formSizer->Layout();
ユーザーは、フォームのジオメトリを完全にブロックするために、すべてのウィジェットの相対的なサイズを設定します。サイズ変更時にこのジオメトリを wxPanel に合わせるにはLayout()
、適切なスケーリング係数f
を計算し、次のようにしてすべてのサイズと位置を設定します。
widget1->SetSize(CalculatedX, CalculatedY, 100/f, 20/f);
CalculatedX+=100/f;
widget2->SetSize(CalculatedX, CalculatedY, 500/f, 20/f);
CalculatedX+=0;
CalculatedY+=20/f;
など(これは単なるスクラッチです。大まかなアイデアとして考えてください。すべてを小さすぎてウィジェットのテキストに収まらないようにしたり、それに応じてフォントサイズを拡大縮小したりすることを避けるためのメカニズムが必要です)。
それは合理的に思えますか?あなたはその話題にどのように向き合いますか?この選択は、私の将来の開発にかなり影響するので、どんな回答、批判、コメントも大歓迎です。