上下を詰めてドッキングするには

[戻る]
ももち 2011/12/07(水) 15:20:59
開発環境:VC++2008 MFC SDI


ダイアログバーを複数生成してすべてドッキング可能にしています。

そのうちの1つには、以下のソースコードを利用してリサイズを可能にしています。
http://support.microsoft.com/kb/143255/ja

この1つのダイアログバーのドッキング時に、高さを最大限(他のダイアログバーに重な
らず)に伸縮させて隙間を埋めたいのですが、どうすればよいでしょうか?
それらしき関数CalcDynamicLayout()を見つけ、解決できると思ったのですが、まずこれを
どこで実行させるのかが分かりません。
ドッキングのイベントハンドラのようなものがあるのでしょうか。
宜しくお願いします。

ITO 2011/12/07(水) 15:30:00
参考にどうぞ
http://support.microsoft.com/kb/143255/ja

ももち 2011/12/07(水) 15:53:41
ありがとうございます。
もう一度ちゃんと読めということですね…。
すみません、読み直してきます。

ITO 2011/12/07(水) 22:37:09
>もう一度ちゃんと読めということですね…。
すみません、参照のサイトが偶然一致してしまいましたね。

ただ、そのサイトにあるサンプルコードが何か手がかりにならないかと思います。

ももち 2011/12/08(木) 22:18:39
ドッキングしたイベントハンドラが見つからず、
ON_WM_NCPAINTのメッセージハンドラを使うことにしました。
最大の高さ取得に関してですが、手詰まり状態です。

・自分自身のダイアログバーのウィンドウ領域を取得
・他にドッキングされているダイアログバーのウィンドウ領域を取得
・フレームのGetDlgItem(AFX_IDW_PANE_FIRST)で真ん中のペイン(?)を取得

これらの取得した座標を元に計算し、最大の高さを導こうとしましたが、
Aが右端の上部でBが右端の下部でCが左端なら…
Aが右端の下部でBが右端の下部でCが左端なら…
などと配置関係を全パターン考慮すれば出来るという自分の考えが愚かに感じてきまし
た。

そんなときにCDockablePaneという、詰めるのを自動でやってくれるクラスを発見したの
で、そちらを使うことにしました。

ただここでも分からないことがあります。
ドッキングの位置を上下左右に設定させることはできたのですが、
さらに最も下や、最も右に配置するなどの設定はどうすればよいのでしょうか。
MSDNを見ると説明が書かれていない関数がいくつもあって困っています。


@左と右が上下に突き抜けている
|--|
|--|


A上と下が左右に突き抜けている
----
|  |
----


図で表すとこのように配置を制御したいのですが…。

古いスレッドには追加発言できません。