请问如何实现拆分视图?
谢谢!

解决方案 »

  1.   

    在CMainFrame类中声明:
    CSplitterWnd m_wndSplitter;BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
    CCreateContext* pContext)
    {
    ///////////////////////////   设置每个视图的位置   //////////////////////////////// // create splitter window//将整个客户区划分为一行两列
    if (!m_wndSplitter.CreateStatic(this, 1, 2))
    return FALSE; //设置左边宽度
    m_wndSplitter.SetColumnInfo(0, 200, 100);
    m_wndSplitter.SetColumnInfo(1, 232, 100);

    m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(0, 150), pContext); //加载右下视图
    m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CRightView), CSize(0, 0), pContext);
    return TRUE;
    }
      

  2.   

    要想增加窗口分割功能, 则必须修改主窗口类。首先,在主窗口类的头文件 MainFrm.h中添加以下代码:
    CsplitterWnd m-SWnd;
    Virtual BOOL OnCreateClient (LPCREATESTRUCTcs,CcreateContext *pContext);
    再在 MainFrm.cpp中添加成员函数 OnCreateClient的定义:
    BOOL CmainFrame::OnCreateCline(LPCREATESTRUCTcs,CcreateContext *p Context)
    {
       return m-SWnd.Creat(this,2,2,Csize(20,20),pContext);
    }
    新的CsplitterWnd类对象m-SWnd用于创建和管理分割窗口,该窗口中可以包含一个或多个面板。首次创建主窗口时,将调用成员函数 OnCreateClient。在缺省情况下,该函数创建一个填充主框窗口客户区的视图窗口。覆盖该函数后,将调用 CsplitterWnd的成员函数 Create来创建分割窗口。其中,第一个参数用于指定分割的父窗口(主窗口);第二个参数指定垂直方向上的面板个数为 2;第三个参数指定水平方向上的面板的个数;第四个参数用于设置每个面板的最小尺寸;第五个参数传递描述信息。上述分割窗口的每个面板都是由视图类对象管理的,当用户在某一面板内显示文档和图形时,必须在其它面板中重新绘制,从而在多个面板中均显示相同的内容。为此,必须调用显示文档类的 UpdateALLView成员函数来更新其它面板。此时,只需加入 pdoc->UpdataALLView(NULL) 即可。