CSplitterWndと言えば、CView系のみスプリット表示するというイメージがありますが、ヘルプを見ていたら
静的分割ウィンドウを作成するとき、同時にすべてのペインを作成する必要があります。CreateView メンバ関数は、この目的のために使われます。しかし、さらにほかの非ビュー クラスも作成できます。
と書いてあるではありませんか。
が、具体的にどうやって実装すれば良いかは書かれておらず、ソースを読んでいたところ、
- 親にCSplitterWndのインスタンスを指定してコントロール等を作成
- IDをCSplitterWnd::IdFromRowCol関数で算出した値にしておく
だけで良いみたいです。
m_wndSplitter.CreateStatic(this, 2, 1, WS_CHILD | WS_VISIBLE); m_edit1.CreateEx(WS_EX_CLIENTEDGE, _T("Edit"), _T(""), WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_WANTRETURN | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_MULTILINE, CRect(0, 0, 300, 300), &m_wndSplitter, m_wndSplitter.IdFromRowCol(0, 0)); m_edit2.CreateEx(WS_EX_CLIENTEDGE, _T("Edit"), _T(""), WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_WANTRETURN | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_MULTILINE, CRect(0, 0, 300, 300), &m_wndSplitter, m_wndSplitter.IdFromRowCol(1, 0));
あとはm_wndSplitter自体をウィンドウ全体に広げて配置したりだとか、m_wndSplitter.SetRowInfoで行の高さを変更したりするだけです。
ダイアログベースのアプリでも気軽に使えそうですね。