哪个达人发发慈悲救救我啊,最近想用VC++做一个三叉视图界面
我查了很多网上资料,大多就是两种方法,我都按照上面的做了,没一个成功显示的
下面是我的代码:工程名为Test
方法一:
首先在CMainFrame中定义两个成员变量
CSplitterWnd m_Splitterwnd1;
CSplitterWnd m_Splitterwnd2;CMainFrame::OnCreateClient()
{
   CRect rect;
   GetClientRect(&rect);
   BOOL bReVal=m_wndSplitter1.CreateStatic(this,2, 1);
   m_wndSplitter1.CreateView(0,0,RUNTIME_CLASS(CChildView),CSize(rect.Width(),rect.Height()/2),pContext);
   m_wndSplitter1.CreateView(1,0,RUNTIME_CLASS(CTextView),CSize(200,200),pContext);
 
   m_wndSplitter2.CreateStatic(&m_wndSplitter1,1,2,WS_VISIBLE | WS_CHILD | WS_BORDER,
                               m_wndSplitter1.IdFromRowCol(0,0));
   bReVal=m_wndSplitter2.CreateView(0,0,RUNTIME_CLASS(CTextView),
CSize(100,100),pContext);
   bReVal=m_wndSplitter2.CreateView(0,1,RUNTIME_CLASS(CTextView),CSize(100,100),pContext);
}其中,CChildView是CView的继承类,CTextView是CEditView的继承类
但显示效果只是m_wndSplitter1切分的两行一列效果,后m_wndSplitter2切分的效果没显示方法二:
同样
首先在CMainFrame中先定义成员变量
CSplitterWnd m_Splitterwnd1;
CMainFrame::OnCreateClient()
{
   CRect rect;
   GetClientRect(&rect);
   BOOL bReVal=m_wndSplitter1.CreateStatic(this,2, 1);
   m_wndSplitter1.CreateView(0,0,RUNTIME_CLASS(CTestView),CSize(rect.Width(),rect.Height()/2),pContext);
   m_wndSplitter1.CreateView(1,0,RUNTIME_CLASS(CTextView),CSize(200,200),pContext);
}然后在CTestView中定义另外一个CSplitterWnd成员变量
CSplitterWnd m_Splitterwnd2;CTestView::OnCreate()
{
         CRect rect;
GetWindowRect(&rect);
m_wndSplitter2.CreateStatic(this,1,2);
CCreateContext *pContext = (CCreateContext*) lpCreateStruct->lpCreateParams;
m_wndSplitter2.CreateView(0,0,RUNTIME_CLASS(CTextView),CSize(rect.Width()/4,rect.Height()),pContext);
m_wndSplitter2.CreateView(0,1,RUNTIME_CLASS(CTextView),CSize(100,100),pContext);
}显示结果同方法一一样,只有两行一列,请达人大哥大姐告诉我怎么回事?
救命啊

解决方案 »

  1.   

    那是创建MFC AppWizard的时候,选择使用切分窗口后,MFC自己生产的一个内部函数
      

  2.   

    向导第四步,高级里选使用切分窗口,然后生成默认代码是这样的
    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
    CCreateContext* pContext)
    {
       return m_wndSplitter.Create(this,
       2, 2,               // TODO: adjust the number of rows, columns
       CSize(10, 10),      // TODO: adjust the minimum pane size
       pContext);
    }
      

  3.   


    BOOL   CMainFrame::OnCreateClient(LPCREATESTRUCT   lpcs,   CCreateContext*   pContext)     
    {   
      //   TODO:   Add   your   specialized   code   here   and/or   call   the   base   class   
                  if(wndSplitter1.CreateStatic(this,1,2)==NULL)     
                                  return   FALSE;   
                  if(wndSplitter2.CreateStatic(&wndSplitter1,2,1,WS_CHILD|WS_VISIBLE,wndSplitter1.IdFromRowCol(0,   1))==NULL)     
                                    return   FALSE;   //将第1行2列再分开2行1列   
        wndSplitter2.CreateView(0,0,RUNTIME_CLASS(CMyTView),CSize(300,750),   pContext);   //连接cmyview到右上   
                wndSplitter2.CreateView(0,1,RUNTIME_CLASS(CMyLView),CSize(0,750),pContext);   //连接cmylview到右下   
                wndSplitter1.CreateView(1,0,RUNTIME_CLASS(CMyTreeView),CSize(0,30),pContext);   //CMyTreeView到左   
                                    return   TRUE;     
    }   
      

  4.   

    好了,搞定,不过你里面一些参数错了,应该是
    if(m_wndSplitter1.CreateStatic(this,1,2)==NULL)     
    return FALSE;   
    if(m_wndSplitter2.CreateStatic(&m_wndSplitter1,2,1,WS_CHILD|WS_VISIBLE,
    m_wndSplitter1.IdFromRowCol(0,1))==NULL)     
    return FALSE;   
    //将第1行2列再分开2行1列  
    m_wndSplitter2.CreateView(0,0,RUNTIME_CLASS(CTextView),CSize(300,350),pContext);
       //连接cmyview到右上   
    m_wndSplitter2.CreateView(1,0,RUNTIME_CLASS(CTextView),CSize(300,750),pContext);   //连接cmylview到右下   
    m_wndSplitter1.CreateView(0,0,RUNTIME_CLASS(CTextView),CSize(100,300),pContext);   //CMyTreeView到左   

     return TRUE;
      

  5.   

    我当然改了的,m_wndSpliter2.createview里参数错了