我的主窗体被分成了四部分(左边是两行一列一个TreeView(上)和CView(下),右边也是两行一列ListView(上)和Edit(下))但是我发现当我改变主窗提大小时(例如缩小将主窗体的底部向上拉),改变的窗口只有两个Cview和Edit,当我将主窗体的底部拉的很高时,CView和Edit就缩小的几乎没有了。而TreeView和ListView的大小没有改变。
当扩大窗体时(将主窗体的底部向下拉),而TreeView和ListView的大小没有改变,改变的是CView和Edit。显然这样很不美关,我就想在窗体改变大小时四个窗体是按比例改变的。
我知道是在OnSize中写可是在那一个里写写什么。不要只说简单几句,先谢谢你来关注。再谢谢能帮我解决问题的人。
还有一个问体就是如想将窗体拆分成一边是一个视图(比如RichEdit或者是GrpoupBox)而另一边是多页组件即tabCtrl
可是我好象没发现有TabCtrlView和RichEditView等。我该怎么做啊。

解决方案 »

  1.   

    还有一个问体就是如想将窗体拆分成一边是一个视图(比如RichEdit或者是GrpoupBox)而另一边是多页组件即tabCtrl你可以用普通的CView 然后在里面创建 一个TabCtrl
      

  2.   

    我想,你可以在主狂架里得到4 View的指正, 当响应onsize()时,给4 View发送猛种消息
      

  3.   

    可是如何取得4个View的指针。我就是为这个问题头痛。
      

  4.   

    2.3实现各个分割区域的通信 
    ■有文档相连的视图之间的通信
    由AppWizard生成的CCuteFTPView是与文档相连的,同时我们也让CView2与文档相连,因此我们需要修改CCuteFTPApp的InitInstance()函数,我们将增加下面的部分。
    AddDocTemplate (new CMultiDocTemplate(IDR_VIEW2TYPE, 
             
             RUNTIME_CLASS(CMainDoc), 
             RUNTIME_CLASS(CMDIChildWnd), 
             RUNTIME_CLASS(CView2))); 
    我们现在来实现CCuteFTPView与CView2之间的通信。由于跟文档类相连的视图类 是不能安全的与除文档类之外的其余的视图类通信的。因此我们只能让他们都与文档 类通信。在文档中我们设置相应的指针以用来获的各个视图。我们重载 CCuteFTPView::OnOpenDocument()函数; 
    CCuteFTPView* pCuteFTPView;CView2* pView2;
    POSITION pos;
    CView* pView;
    while(pos!=NULL)
    {
         pView=GetNextView(pos); 
         if(pView->IsKindOf(RUNTIME_CLASS(CCuteFTPView))==NULL) 
             pCuteFTPView=(CCuteFTPView*)pView; 
         else(pView->IsKindOf(RUNTIME_CLASS(CCuteFTPView))==NULL) 
             pView2=(CView2*)pView; 

    这样我们在文档类中就获的了跟它相连的所有的视图的指针。
    如果需要在 CCuteFTPView中调用CView2中的一个方法DoIt()则代码如下: 
    CCuteFTPDoc* pDoc=GetDocument();CView2* pView2=pDoc->pView3;pView3.DoIt(); ■无文档视图与文档关联视图之间的通信
    CView3和CView4都是不与文档相关联的。我们现在实现CView3与CView2的通信.正如前面所说,CView2只能安全的与CCuteFTPDoc通信,因此,CView3如果需要跟CView2通信,也必须借助于文档类。因此程序的关键是如何在CView3中获得文档的指针。视图类中没有这样的类成员可以用来直接访问文档类。但是我们知道在主窗口类MainFrame中我们可以获得程序的任意窗口类的指针。因此我们只要获得程序主窗口了的指针,就可以解决问题了。代码实现在CView3中访问CView2中的DoIt()方法。CView3中的代码如下: CMainFrame* MainFrame=(CMainFrame*)this->GetParent()->GetParent(); 
             
             CCuteFTPDoc* Doc=(CCuteFTPDoc*)MainFrame->GetActiveDocument();
             if(Doc!=NULL) Doc->DoIt(); 
             
             CCuteFTPDoc中的相应的处理函数DoIt()代码如下: 
             
             CView2* pView2; 
             POSITION pos; 
             CView* pView; 
             while(pos!=NULL) 
             { 
                     pView=GetNextView(pos);
                     if(pView->IsKindOf(RUNTIME_CLASS(CView2))==NULL) 
                     pView2=(CView2*)pView; 
             } 
             pView2->DoIt(); 
    ■无文档关联视图之间的通信
    CView3和CView4都是不跟文档相连的,如何实现他们之间的通信呢。 正如我们在上面所说的那样,由于在主框架中我们可以访问任意的视图,因此我们的主要任 务还是在程序中获得主框架的指针。在CView3中访问CView4中的方法DoIt()。 
    CMainFrame* MainFrame=(CMainFrame*)this->GetParent()->GetParent(); 
             
             CView4* View4=(CView4*)MainFrame->m_wndSplitter1.GetPane(2,0); 
             View4->DoIt(); 到现在我们已经实现了CuteFTP的主窗口的框架并且能够实现他们之间相互通信的框架。 同样的我们可以实现其他的一些流行界面例如NetAnts,Foxmail的分割。 
      

  5.   

    refer to :  http://www.codeproject.com/docview/replacingview.asp
      

  6.   

    SetColumnInfo和SetRowInfo,然后ReCalcLayOut。