split.CreateStatic(this,2,1);

split1.CreateStatic(&split,1,2,WS_CHILD | WS_VISIBLE | WS_BORDER,split.IdFromRowCol(0,0));
split1.CreateView(0,0,RUNTIME_CLASS(CLeft),CSize(350,500),pContext);
split1.CreateView(0,1,RUNTIME_CLASS(CRight),CSize(350,500),pContext);
     
split.CreateView(1,0,RUNTIME_CLASS(information),CSize(700,100),pContext);为什么显示出来各个窗口的大小和设置的不一样,整个窗口只能看见类information那个窗口,要用鼠标拖动才能看见上面的那两个,这是怎么回事啊,请高手指教一下

解决方案 »

  1.   

    我已经设了主框架的大小了
    SetWindowPos(NULL,0,0,700,600,SWP_NOMOVE|SWP_NOZORDER);
      

  2.   

    改2个地方就OK,(换个次序)
    split.CreateStatic(this,2,1);

    split1.CreateStatic(&split,1,2,WS_CHILD | WS_VISIBLE | WS_BORDER,split.IdFromRowCol(1,0)); //这儿
    split1.CreateView(0,0,RUNTIME_CLASS(CLeft),CSize(350,500),pContext);
            //这儿:
            split1.CreateView(0,1,RUNTIME_CLASS(CRight),CSize(350,500),pContext);
           
    split.CreateView(0,0,RUNTIME_CLASS(information),CSize(700,100),pContext);
      

  3.   

    呵呵,写错注释的位置了:split1.CreateStatic(&split,1,2,WS_CHILD | WS_VISIBLE | WS_BORDER,split.IdFromRowCol(1,0)); //这儿
    split1.CreateView(0,0,RUNTIME_CLASS(CLeft),CSize(350,500),pContext);
            split1.CreateView(0,1,RUNTIME_CLASS(CRight),CSize(350,500),pContext);
           //这儿:
    split.CreateView(0,0,RUNTIME_CLASS(information),CSize(700,100),pContext);
      

  4.   

    楼上的方法切分窗口的方式和楼主要求不一样,:)从你的语句实在分析不出什么原因,我估计还是size的问题的,你的主窗口是700×600没错,但是它的客户区肯定没有这么大,顶多是690×560(只是估计),然后切分窗口的切分条还要宽度,所以size肯定不对,用GetClientRect获取主框架的客户区大小,然后计算。尝试一下吧,说不定就是它的问题
      

  5.   

    风清高兄,不是那儿的问题。
    我以前也遇到这个问题,
    其实只要跟踪代码我们就很容易知道原因://MFC源码:
    BOOL CSplitterWnd::CreateStatic(CWnd* pParentWnd,
    int nRows, int nCols, DWORD dwStyle, UINT nID)
    {
    ASSERT(pParentWnd != NULL);
    ASSERT(nRows >= 1 && nRows <= 16);
    ASSERT(nCols >= 1 && nCols <= 16);
    ASSERT(nCols > 1 || nRows > 1);     // 1x1 is not permitted
    ASSERT(dwStyle & WS_CHILD);
    ASSERT(!(dwStyle & SPLS_DYNAMIC_SPLIT)); // can't have dynamic split ASSERT(m_nRows == 0 && m_nCols == 0);       // none yet
    m_nRows = m_nMaxRows = nRows;
    m_nCols = m_nMaxCols = nCols;
              
     //*********************问题出在这儿************************************* //
    // create with zero minimum pane size
    if (!CreateCommon(pParentWnd, CSize(0, 0), dwStyle, nID))
    return FALSE;
     //********************************************************************* // // all panes must be created with explicit calls to CreateView
    return TRUE;
    }因此解决办法也出来了,
    其中一个比较简单的方法从CSplitterWnd继承一个类,改写CreateStatic 。
      

  6.   

    唉!又一个懒人!!!记得我当初为这个问题忙到深夜,只有自己辛苦劳动收获才大啊。如果不行,你可以考虑给我发信 [email protected],
    我晚上把我的例子发给你。
      

  7.   

    to:I_Love_CPP,看到你的掉换顺序就能解决问题的这个结果,我也估计不是尺寸的问题了,我来学习来了,:),多谢!
      

  8.   

    查了一下msdn ,原来用SetRowInfo()和SetColumnInfo()改一下窗口的大小就行了
      

  9.   

    来得太晚了,没错,我当初也是用 SetColumnInfo ,SetRowInfo 和RecalcLayout实现的。