Last Updated 2014/08/20
Programming Tips Visual C++ MFC ウィンドウ  索 引 
ウィンドウ分割
2004/07/23

ウィンドウを分割するにはスプリッターウィンドウを使用する.

MainFrm.h

class CMainFrame : public CFrameWnd
{
// アトリビュート
protected:
    CSplitterWnd m_wndSplitter;
}

MainFrm.cpp

CFrameWnd::OnCreateClient() をオーバーライドします.

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
{
    // TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください

    // 分割ウィンドウを作成
    if(!m_wndSplitter.CreateStatic(this, 2, 1))
        return FALSE;

    if( !m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CMy1View), CSize(100, 100), pContext) ||
        !m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CMy2View), CSize(100, 100), pContext) ) {
        m_wndSplitter.DestroyWindow();
        return FALSE;
    }

    return TRUE;                            // こうしなければ分割できない
//  return CFrameWnd::OnCreateClient(lpcs, pContext);
}


CreateStatic() には行数と列数を渡す.
エクスプローラーみたいな左右分割ウィンドウであれば 1, 2 を渡す(1行2列)
上下分割ウィンドウは 2, 1 を渡す(2行1列)

CreateView() は 0 から始まるビューを指定する.
左右分割であれば
    m_wndSplitter.CreateStatic( ... , 2, 1);
    m_wndSplitter.CreateView( 0, 0, ... );   // 1行目1列目
    m_wndSplitter.CreateView( 0, 1, ... );   // 1行目2列目
上下分割であれば
    m_wndSplitter.CreateStatic( ... , 2, 1);
    m_wndSplitter.CreateView( 0, 0, ... );   // 1行目1列目
    m_wndSplitter.CreateView( 1, 0, ... );   // 2行目1列目
となる.



参照
ウィンドウ分割固定化
スプリッターウィンドウで3ペイン
スプリッターウィンドウの追加
前後のTips
ウィンドウ分割

DSS ProgrammingTipsCGI Ver2.01