龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

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

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
在Cmainfrm.h中我们将增加下面的代码: CSplitterWnd wndSplitter1; CSplitterWnd wndSplitter2; ▲ 重载CMainFrame::OnCreateClient()函数: BOOL CMainFrame::OnCreateClient( LPCREATESTRUCT

  在Cmainfrm.h中我们将增加下面的代码:

CSplitterWnd wndSplitter1;
CSplitterWnd wndSplitter2;

  ▲ 重载CMainFrame::OnCreateClient()函数:
BOOL CMainFrame::OnCreateClient( LPCREATESTRUCT  /*lpcs*/, CCreateContext* pContext)
{ //创建一个静态分栏窗口,分为三行一列
     if(m_wndSplitter1.CreateStatic(this,3,1)==NULL)
              return FALSE;
  //将CCuteFTPView连接到0行0列窗格上
     m_wndSplitter1.CreateView(0,0,RUNTIME_CLASS(CCuteFTPView),CSize(100,100), pContext);
     m_wndSplitter1.CreateView(2,0,RUNTIME_CLASS(CView4),CSize(100,100),pContext);
  //将CView4连接到0行2列
     if(m_wndSplitter2.CreateStatic(&m_wndSplitter,1,2,WS_CHILD|WS_VISIBLE,
          m_wndSplitter.IdFromRowCol(1, 0))==NULL)
               return FALSE; //将第1行0列再分开1行2列
  //将CView2类连接到第二个分栏对象的0行0列
          m_wndSplitter2.CreateView(0,0,RUNTIME_CLASS(CView2),CSize(400,300),pContext);
  //将CView3类连接到第二个分栏对象的0行1列
          m_wndSplitter2.CreateView(0,1,RUNTIME_CLASS(CView3),CSize(400,300),pContext);
               return TRUE;
}
  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();
  ■无文档视图与文档关联视图之间的通信

精彩图集

赞助商链接