Last Updated 2014/08/20 |
Programming Tips Visual C++ MFC 他のコントロール | 索 引 |
スプリッターウィンドウで3ペイン
2014/06/29
MFC のアプリケーションウィザードでエクスプローラースタイルの左右に分割されたアプリケーションは作成可能。 では,メーラーなどでよくある3ペインのウィンドウを作成してみよう。 エクスプローラースタイルでは以下の様にコーディングされている。 MainFrm.cpp
BOOL CMainFrame::OnCreateClient( LPCREATESTRUCT /*lpcs*/,
CCreateContext* pContext)
{
// 分割ウィンドウを作成します
if (!m_wndSplitter.CreateStatic(this, 1, 2))
return FALSE;
if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(100, 100), pContext) ||
!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CMainView), CSize(100, 100), pContext))
{
m_wndSplitter.DestroyWindow();
return FALSE;
}
return TRUE;
}
それを次の様にする。 まずは View の作成。 クラスウィザードなどで View を追加する。 3分割するにはスプリッターがもう1つ必要になるので,追加する。 MainFrm.h protected: CSplitterWnd m_wndSplitter; CSplitterWnd m_wnd2Splitter; // これを追加 追加した View のヘッダをインクルードして実装する。 MainFrm.cpp // 追加した View のインクルード #include "TopView.h" BOOL CMainFrame::OnCreateClient( LPCREATESTRUCT /*lpcs*/, CCreateContext* pContext) { // 分割ウィンドウを作成します if (!m_wndSplitter.CreateStatic(this, 1, 2)) return FALSE; // スプリッターで再度分割 if (!m_wnd2Splitter.CreateStatic(&m_wndSplitter, 2, 1 , WS_CHILD | WS_VISIBLE, m_wndSplitter.IdFromRowCol(0, 1))) return FALSE; if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(100, 100), pContext) || // 再分割した側に View を作成 !m_wnd2Splitter.CreateView(0, 0, RUNTIME_CLASS(CTopView), CSize(100, 100), pContext) || !m_wnd2Splitter.CreateView(1, 0, RUNTIME_CLASS(CMainView), CSize(100, 100), pContext)) { m_wndSplitter.DestroyWindow(); m_wnd2Splitter.DestroyWindow(); return FALSE; } return TRUE; } 詳しい説明は省きますが,1行2列に分割して,片方の列を2行1列に分割する方法です。 スプリッターが1つの場合,2行2列の4つのビューとか1行4列の4つのビューとかの単純分割しか出来ません。 複雑な分割はその都度スプリッターが必要になります。 参照 ウィンドウ分割 ウィンドウ分割固定化 スプリッターウィンドウの追加 |
|