Windows C ++ダイアログサイズ変更クラス
質問
画面のサイズが変更されると、必要に応じて個々のアイテムを伸縮する、本当に優れたダイアログリサイザークラスを探しています。 Stephan Keilには、基本的にすべてを設定された比率でサイズ変更する優れたもの(DlgResizeHelper)がありますが、よりスマートなものを探しています。
例:
-
アイコンのサイズを変更しないでください
-
単一行のテキストボックスは縦方向に引き伸ばさないでください
-
ボタンはおそらく同じサイズのままでなければなりません
基本的に、すべてのコントロールを調べて、静的テキストフィールドがその次/下のコントロールに関連していることを確認し、2つを固定し、「スマート」な方法で大きなコントロールのサイズを変更しますよさそうだ。
そのようなフレームワークはありますか?私は1つに取り組んできましたが、おそらく既製のものが良いでしょう。
フォローアップ:推奨される解決策を検討しています。それらの多くは、ダイアログ上の各コントロールをアンカーに入れる必要があります。アンカーがどうあるべきかを理解し、推測が間違っている場合に手動でアンカーできる機能を備えたスマートなものを探しています。可能性があるように思えます-ほとんどの人間は、編集フィールドの隣の静的テキストフィールドを一緒に固定することに同意するでしょう。ここで少しAIを探しているところだと思います:
解決
wxWidgetsを使用できます。 MFCを完全に置き換え、マルチプラットフォームであり、レイアウトベースのダイアログメカニズムを提供します。
他のヒント
ResizableLib (PropertySheetsおよびPagesも実行)codeproject、IIRCから。ダイアログの移動に応じてダイアログとコントロールがどのようにサイズ変更または移動するかを決定するアンカーポイントを設定します。
コントロールごとに最大2つのアンカー(左、右)を設定して、ダイアログの移動に応じて移動したり、移動に応じてサイズを変更したりできます。完全に正しく理解するのが難しい場合、非常に理解しやすいです:)
多くのことを試しましたが、最終的に http://www.codeprojectで解決しました。 com / KB / dialog / layoutmgr.aspx 。あなたが提案する「インテリジェントな」レイアウトは行いません。どのライブラリでも、どのプラットフォームでも、それを見たことはありません-とにかく半分の時間でオーバーライドしなければならない内部の魔法をたくさん持たないと、どのように機能するかわかりません。
Ultimate Toolbox MFCライブラリ(ここにはCodeProjectに< href = "http://www.codeproject.com/KB/MFC/UltimateToolbox_Layout.aspx" rel = "nofollow noreferrer">レイアウトマネージャー。私はそれを自分で使用していませんが、あなたが望むことをするようです。
プロフェッショナルGUI をご覧ください。ダイアログコントロールのサイズ変更にクラスライブラリを使用しています。これは無料版の一部だと思います。
CodeGuruのCResizeクラスを使用して、すべてのコントロールのサイズを自動的に変更します。各コントロールのサイズをどのように変更するかを指示すると、それが自動的に機能します。
サイズ変更パラダイムは、ダイアログのサイズが変更されたときにコントロールの各側がどれだけ移動するかを指定することです。
SetResize(IDC_EDIT1, 0, 0, 0.5, 1);
SetResize(IDC_EDIT2, 0.5, 0, 1, 1);
多数のダイアログコントロールがある場合に非常に便利です。
これはCodeProjectからの無料ソリューションです
http://www.codeproject.com/KB/dialog/dlgresizearticle.aspx
ダイアログのサイズ変更に応じてコントロールを配置する単純なマクロのセットにすぎません。
編集-OPコメントに従ってください。 MFCのQT / WXなどの一般的なサイザーサポートについては知りません。Winformsなどの新しいフレームワークにも存在しないようです。
QT / WXには、ウィジェットが異なるサイズのマルチプラットフォームで必要であるため、MSの欠如が説明されています。しかし、多言語ポートの場合にも重要です。キャンセルするドイツ語の長さは30文字です。