我要把窗口切分成如图所示的四块:
———————————————
|            |            |
|            |            |
|            |———————
|            |            |
|            |            |
———————————————
|                         |
|                         |
|                         |
———————————————
我写的代码怎么不能运行呢?麻烦高手指点一下
m_wndSplitter.CreateStatic(this,2,1);//两行一列
m_wndSplitter1.CreateStatic(&m_wndSplitter,1,2);//一行两列
m_wndSplitter1.CreateView (0,0,RUNTIME_CLASS(CTextView),CSize(0,0),pContext);//切出来左上角的那个
m_wndSplitter1.SetColumnInfo(0,300,   0);//设定其宽度
m_wndSplitter2.CreateStatic(&m_wndSplitter1,2,1);//两行一列
m_wndSplitter2.CreateView (0,0,RUNTIME_CLASS(CTextView),CSize(0,0),pContext);//切出来右上角那个
m_wndSplitter2.CreateView (1,0,RUNTIME_CLASS(CTextView),CSize(0,0),pContext);//切出来右上角下面那个
m_wndSplitter.SetRowInfo(0,200,   0);//设定高度
m_wndSplitter.CreateView (1,0,RUNTIME_CLASS(CGraphView),CSize(0,0),pContext);//切出来最下面那个

解决方案 »

  1.   

    转帖一下,自己照着做,理解一下代码的意思。注意一下IdFromRowCol以及最后的返回值。
    使用VC6.0实现窗口的任意分割   
        
      一、关于CSplitterWnd类   
      我们在使用CuteFtp或者NetAnt等工具的时候,一般都会被其复杂的界面所吸引,在这些界面中窗口被分割为若干的区域,真正做到了窗口的任意分割。   那么我们自己如何创建类似的界面,也实现窗口的任意的分割呢   ?在VC6.0中这就需要使用到CSplitterWnd类。CSplitterWnd看上去像是一种特殊的框架窗口,每个窗口都被相同的或者不同的视图所填充。当窗口被切分后用户可以使用鼠标移动切分条来调整窗口的相对尺寸。虽然VC6.0支持从AppWizard中创建分割窗口,但是自动加入的分割条总是不能让我们满意,因此我们还是通过手工增加代码来熟悉这个类。     
      CSplitterWnd的构造函数主要包括下面三个。     
        
        
      BOOL   Create(CWnd*   pParentWnd,int   nMaxRows,int   nMaxCols,SIZE   sizeMin,CCreateContext*   pContext,DWORD   dwStyle,UINT   nID);   
      功能描述:该函数用来创建动态切分窗口。   参数含义:pParentWnd   切分窗口的父框架窗口。   nMaxRows,nMaxCols是创建的最大的列数和行数。   sizeMin是窗格的现实大小。   pContext   大多数情况下传给父窗口。   nID是字窗口的ID号.   BOOL   CreateStatic(CWnd*   pParentWnd,int   nRows,int   nCols,DWORD   dwStyle,UINT   nID)     
      功能描述:用来创建切分窗口。   参数含义同上。   BOOL   CreateView   (int   row,int   col,CruntimeClass*   pViewClass,SIZE   sizeinit,CcreateContext*   pContext);   
      功能描述:为静态切分的窗口的网格填充视图。在将视图于切分窗口联系在一起的时候必   须先将切分窗口创建好。     
      参数含义:同上。   
      从CSplitterWnd源程序可以看出不管是使用动态创建Create还是使用静态创建CreateStatic,在函数中都调用了一个保护函数CreateCommon,从下面的CreateCommon函数中的关键代码可以看出创建CSplitterWnd的实质是创建了一系列的MDI子窗口。     
      DWORD   dwCreateStyle   =   dwStyle   &   ~(WS_HSCROLL|WS_VSCROLL);   
      if   (afxData.bWin4)     
                    dwCreateStyle   &=   ~WS_BORDER;   //create   with   the   same   wnd-class   as   MDI-Frame   (no   erase   bkgnd)     
      if   (!CreateEx(0,   _afxWndMDIFrame,   NULL,   dwCreateStyle,     
                          0,   0,   0,   0,pParentWnd->m_hWnd,   (HMENU)nID,   NULL))     
                    return   FALSE;   //   create   invisible     
                            
        
      二、创建嵌套分割窗口     
      2.1创建动态分割窗口   
      动态分割窗口使用Create方法。下面的代码将创建2x2的窗格。     
      m_wndSplitter.Create(this,2,2,CSize(100,100),pContext);   
        
      但是动态创建的分割窗口的窗格数目不能超过2x2,而且对于所有的窗格,都必须共享同一个视图,所受的限制也比较多,因此我们不将动态创建作为重点。我们的主要精力放在静态分割窗口的创建上。     
      2.2创建静态分割窗口   
      与动态创建相比,静态创建的代码要简单许多,而且可以最多创建16x16的窗格。不同的窗格我们可以使用CreateView填充不同的视图。     
      在这里我们将创建CuteFtp的窗口分割。CuteFtp的分割情况如下:     
      CCuteFTPView     
      CView2   CView3     
      CView4     
        
      创建步骤:     
      ▲   在创建之前我们必须先用AppWizard生成单文档CuteFTP,生成的视类为   CCuteFTPView.同时在增加三个视类或者从视类继承而来的派生类CView2,CView3   CView4.     
      ▲   增加成员:     
      在Cmainfrm.h中我们将增加下面的代码:     
        
        
      CSplitterWnd   wndSplitter1;   
                                          CSplitterWnd   wndSplitter2;   
      ▲   重载CMainFrame::OnCreateClient()函数:   BOOL   CMainFrame::OnCreateClient(   LPCREATESTRUCT     /*lpcs*/,   CCreateContext*   pContext)     
      {   //创建一个静态分栏窗口,分为三行一列     
                if(m_wndSplitter1.CreateStatic(this,3,1)==NULL)     
                                  return   FALSE;   
          //将CCuteFTPView连接到0行0列窗格上   
                m_wndSplitter1.CreateView(0,0,RUNTIME_CLASS(CCuteFTPView),CSize(100,100),   pContext);     
                m_wndSplitter1.CreateView(2,0,RUNTIME_CLASS(CView4),CSize(100,100),pContext);     
          //将CView4连接到0行2列   
                if(m_wndSplitter2.CreateStatic(&m_wndSplitter1,1,2,WS_CHILD|WS_VISIBLE,     
                          m_wndSplitter1.IdFromRowCol(1,   0))==NULL)     
                                    return   FALSE;   //将第1行0列再分开1行2列     
          //将CView2类连接到第二个分栏对象的0行0列   
                          m_wndSplitter2.CreateView(0,0,RUNTIME_CLASS(CView2),CSize(400,300),pContext);     
          //将CView3类连接到第二个分栏对象的0行1列   
                          m_wndSplitter2.CreateView(0,1,RUNTIME_CLASS(CView3),CSize(400,300),pContext);     
                                    return   TRUE;     
      }     
      //pane(1,0),不能生成view   
      //也可以生成Frame,然后就可以切分   
      

  2.   

    m_wndSplitter2.CreateStatic(&m_wndSplitter1,2,1);//两行一列这句应该设置第五个参数为m_wndSplitter1.IdFromRowCol(0, 1),否则就创建在左边与左边的textview相冲突了即m_wndSplitter2.CreateStatic(&m_wndSplitter1,2,1,WS_CHILD|WS_VISIBLE,m_wndSplitter1.IdFromRowCol(0, 1));//两行一列