基于对话框的MFC项目实现窗口分割

1. 新建一个MFC对话框程序MySplitter。 再插入两个Dialog资源 ,这里一定要选择IDD_FORMVIEW类别的对话框,对这两个对话框分别新建CMyFormView0 和CMyFormView1,基类别选CDialog,一定要选择CFormView。

2.主对话框类MySplitterDlg.h中新增两个成员变量

    CFrameWnd*      m_pMyFrame;    // 分隔窗口  
    CSplitterWnd    m_cSplitter;     // 左右分隔  

3.  CMySplitterDlg中增加WM_CREATE的消息响应,编辑OnCreate()

int CMySplitterDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CDialog::OnCreate(lpCreateStruct) == -1)
        return -1;
    // Because the CFRameWnd needs a window class, we will create a new one. I just copied the sample from MSDN Help.
    // When using it in your project, you may keep CS_VREDRAW and CS_HREDRAW and then throw the other three parameters.
    //需要注册窗口类
    CString strMyClass = AfxRegisterWndClass(CS_VREDRAW | CS_HREDRAW,  
                   ::LoadCursor(NULL, IDC_ARROW),    (HBRUSH) ::GetStockObject(WHITE_BRUSH),   
                  ::LoadIcon(NULL, IDI_APPLICATION));

    // Create the frame window with "this" as the parent
    m_pMyFrame = new CFrameWnd;
    m_pMyFrame->Create(strMyClass,_T(""), WS_CHILD,   CRect(0,0,300,300), this);
    m_pMyFrame->ShowWindow(SW_SHOW);

    // and finally, create the splitter with the frame as the parent
    m_cSplitter.CreateStatic(m_pMyFrame,1, 2); //在Frame里切分视图窗口为1×2,就是一行两列
    m_cSplitter.CreateView(0,0, RUNTIME_CLASS(CMyFormView0),   CSize(100,100), NULL);//第一行一列
    m_cSplitter.CreateView(0,1, RUNTIME_CLASS(CMyFormView1), CSize(100,100), NULL);//第一行二列

     return 0;
}



4.在CMySplitterDlg::OnInitDialog()中显示Frame

int CMySplitterDlg::OnInitDialog()
{
CDialog::OnInitDialog();

CRect cRect;
GetWindowRect(&cRect);
ScreenToClient(&cRect);
m_pMyFrame->MoveWindow(&cRect);
m_pMyFrame->ShowWindow(SW_SHOW);


return TRUE;
}





你可能感兴趣的:(MFC)