正 文

使用VC6.0实现窗口的任意分割


www.7dspace.com  更新日期:2006-3-6 4:42:06  七度空间


  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的分割。

2页,页码:[1] [2] 

上一篇:解决JSP开发Web程序中的中文问题
下一篇:FLASH与后台数据交换方法整理
使用VC6.0实现窗口的任意分割 作者:张中庆 来源:vckbase
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐