WEB开发网
开发学院软件开发VC 使用VC6.0实现窗口的任意分割 阅读

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

 2010-07-06 20:43:38 来源:WEB开发网   
核心提示:2.2 创建静态分割窗口与动态创建相比,静态创建的代码要简单许多,使用VC6.0实现窗口的任意分割(2),而且可以最多创建16x16的窗格,不同的窗格我们可以使用CreateView填充不同的视图,因此我们只能让他们都与文档 类通信,在文档中我们设置相应的指针以用来获的各个视图,在这里我们将创建CuteFtp的窗口分割

2.2 创建静态分割窗口

与动态创建相比,静态创建的代码要简单许多,而且可以最多创建16x16的窗格。不同的窗格我们可以使用CreateView填充不同的视图。

在这里我们将创建CuteFtp的窗口分割。CuteFtp的分割情况如下:

CCuteFTPView
CView2 CView3
CView4

创建步骤:

▲ 在创建之前我们必须先用AppWizard生成单文档CuteFTP,生成的视类为 CCuteFTPView.同时在增加三个视类或者从视类继承而来的派生类CView2,CView3 CView4.

▲ 增加成员:

在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();

上一页  1 2 3 4 5  下一页

Tags:使用 VC 实现

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接