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で行の高さを変更したりするだけです。
ダイアログベースのアプリでも気軽に使えそうですね。

記事検索

アーカイブ