我的分隔条分出左边两个视,右边一个视.原想把左右两边各占一半,但实际的效果是右边占了整个用户区.代码如下:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
{
RECT cliRect;
GetClientRect(&cliRect);
m_wndSplitterH.CreateStatic(this,1,2);
SIZE size; m_wndSplitterV.CreateStatic(&m_wndSplitterH,2,1,WS_CHILD|WS_VISIBLE,
m_wndSplitterH.IdFromRowCol(0,0)); size.cx=cliRect.right/2;size.cy=cliRect.bottom/3;
m_wndSplitterV.CreateView(0,0,RUNTIME_CLASS(CSndView),size,pContext);
m_pwndSndView=(CSndView*)m_wndSplitterV.GetPane(0,0); size.cx=cliRect.right/2;size.cy=0;
m_wndSplitterV.CreateView(1,0,RUNTIME_CLASS(CSndView),size,pContext);
m_pwndRcvView=(CSndView*)m_wndSplitterV.GetPane(1,0);
m_pwndRcvView->GetEditCtrl().SetReadOnly(); size.cx=cliRect.right/2;size.cy=0;
m_wndSplitterH.CreateView(0,1,RUNTIME_CLASS(CResultView),size,pContext);
m_pwndResultView=(CResultView*)m_wndSplitterH.GetPane(0,1); return CFrameWnd::OnCreateClient(lpcs, pContext);
}
不知该如何纠正.

解决方案 »

  1.   

    我们在使用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.   

    m_wndSpliiterV.SetPanlInfo(0,0,CSize(cliRect/2,0));
      

  3.   

    你左边的是再用一个splitter填的,所以大小就是(0,height)
    右边的view的那个size的内容是不起作用的,因为一个splitter中最后一块的大小,就是分剩的
    所以你得在后面加SetColumnInfo(0,cliRect.right/2,0);
      

  4.   

    To sonicfly(致远) ,我用了你的方法,但还是不起作用.m_wndSplitterV.SetColumnInfo(0,cliRect.right/2,0);
      

  5.   

    实际上你们希望切分成cuteftp的样子,那样你的切分办法好像有点问题,好像要切分哦两次,分别置view
      

  6.   

    我试了一下,好像返回是值不对!!这是我一个程序的OnCreateClient,只不过是右边分成上下两部分:
    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
    {
       // TODO: Add your specialized code here and/or call the base class
       BOOL ret=m_wndSplitter1.CreateStatic(this,1,2);
       ret|=m_wndSplitter1.CreateView(0,0,RUNTIME_CLASS(CControlView),
            CSize(210,100),pContext);
       ret|=m_wndSplitter2.CreateStatic(&m_wndSplitter1, 2, 1,
            WS_CHILD | WS_VISIBLE ,m_wndSplitter1.IdFromRowCol(0, 1));
       ret|=m_wndSplitter2.CreateView(1,0,RUNTIME_CLASS(CDYNView),
            CSize(100,100),pContext);
       ret|=m_wndSplitter2.CreateView(0,0,RUNTIME_CLASS(CBmpView),
            CSize(610,350),pContext);
       return ret;
    }