Docking/Floating ウインドウ †
要約 †ウィンドウの表示位置を任意にフローティングさせることが可能で、固定表示に切り替えることも可能なDocking/Floating ウインドウについて説明します。 本文 †yukichikaと申します。 このテーマに沿って、不完全ではありますが私がドッキングウィンドウコントロールを 作成したときのtipsを記述させていただきます。 私が作成したメインコントロールは4種に分かれます。 �.據璽献灰鵐謄福�.NET標準のTabPageコントロールに相当します) �⊂綉��,離灰鵐謄覆魍頁次Υ浜�するコンテナ(.NET標準のTabControlコントロールに相当します。)以下、「ペイン」と呼びます。 �‐綉��△離灰鵐謄覆魍頁次Υ浜�するコンテナ これがメインウィンドウ上に直接配置される、実質上一番上の階層のコンテナです。以下「ベイ」と呼びます。 �ぞ綉��△魍頁爾掘↓ 銑�のコンテナとOLEドラッグアンドドロップで通信するFormクラスを継承したフォーム。以下、単に「フォーム」と呼びます。 ドッキング動作を実現するにあたり、重要なのは�◆銑い力�携になります。 ドッキング/フローティングだけに絞って大雑把に言えば、 ペインの親コントロールをベイやフォームに切り替えて実現する。ということになります。 しかし、ドッキング/フローティングにおける最大の問題は、
VisualStudio等で実装されている、このようなドッキングウィンドウは大抵の場合、
ここから推測できることとしては、 �^譴弔離Ε�ンドウ(この場合はペイン)が他のウィンドウを子ノードとして 管理すればよいではないか。 ということになります。 では、管理する子ノードの数や分岐法則は?という問題が次にあります。 A.ユーザの操作上、四隅にドッキング追加できるのだから、「任意のペインは4方向の子ノードを持つ」で良いのでは? 残念ながら、その方法では私は上手く実装できませんでした。 ノードの階層が増えるにつれて、ルートノードが、子ノードの位置やサイズを把握できなくなるからです。 リサイズ時、ドッキング状態の再構成時に、位置や領域などの情報は必須です。 結論から言うと私の場合は、
としました。 さらに、このノード(ペイン)間の関係性にもう一つのルールを加えます。
この2つの決まりによって、ペインを配置するメインウィンドウ「ベイ」上では 次の法則が成り立つようになります。 �.戰ぞ紊痢�任意のペインの子ノードに関して、
�△泙拭△△襯撻ぅ鵑魎霆爐箸靴織痢璽疋船Дぅ鵑遼�端子ノードに関して
言葉では分かりにくいと思います。 VisualStudioのデザイナ上で、SplitContainerコントロールを連鎖的に配置して イメージしてみてください。上記文章の意図が分かりやすくなります。 兎に角、この法則を頼りに、最初に挙げた��「ベイ」は子コントロールの追加・削除・ 及びレイアウトを行います。 この二つのルールにより、一番最初に挙げた
が解決できます。 残念ながら、ソースコードの雛形は、wikiに載せられる分量ではないので添付できませんが、 この文章が皆様の参考になれば幸いです。 コメント †
|