我增加了两个摸板,一个基于CTreeView,一个基于CFormView
我在CChildFrame的OnCreateClient中添加了切分视图的程序
我现在想知道的时怎样双击主框架下的一个菜单时,能将这两个视图同时显示出来
希望能得到帮助。

解决方案 »

  1.   

    cxjlw(老为),那怎么同时显示静态拆分窗口啊
      

  2.   

    使用CSplitterWnd 啊,然后 CreateStatic,然后在CreateView 啊。很简单了:)
      

  3.   

    我是想点击主框架下的菜单中的按钮时显示另一个框架出来。
     winthegame(120斤重的大青蛙) 说的我都已经做了,就差在按钮对应的函数下编程了
    快没分了,希望大家抓紧挣分机会
    机不可失,时不再来哦!):
      

  4.   

    同意 Mackz(在相互) ,你在CChildFrame的OnCreateClient中添加了切分视图的程序,怎么会不显示视图呢?
      

  5.   

    因为我选择的是不支持文档和视图,所以我手动田加了一个文档和两视图类
    BOOL CMyApp::InitInstance()
    {.....
    //创建基于一个文档两视图的框架(左视图为树视图,右视图为FormView)
    pDocTemplate =new CMultiDocTemplate(
    IDR_MYTYPE,
    RUNTIME_CLASS(CMyDoc),
    RUNTIME_CLASS(CChildFrame),
    RUNTIME_CLASS(CLeftView));
    AddDocTemplate(pDocTemplate);
       pDocTemplate =new CMultiDocTemplate(
    IDR_MYTYPE,
    RUNTIME_CLASS(CMyDoc),
    RUNTIME_CLASS(CChildFrame),
    RUNTIME_CLASS(CChartOutView));
    AddDocTemplate(pDocTemplate);
    ......}
    BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if (!m_wndSplitter.CreateStatic(this, 1, 2))
    return FALSE; if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(  100, 100), pContext) ||
    !m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CChartOutView), CSize(0, 0), pContext))
    {
    m_wndSplitter.DestroyWindow();
    return FALSE;
    }
    //    SetActiveView((CTreeView*)m_wndSplitter.GetPane(0,0));
    return TRUE;
    // return CMDIChildWnd::OnCreateClient(lpcs, pContext);
    }
    然后我希望单击报表按钮时,显示这个框架
    void CMainFrame::OnChartOut() 
    {
    // TODO: Add your command handler code here      这儿该怎样编阿
    }
      

  6.   

    在Mainfrm.cpp中,水平切分的话这么做,大概的代码如下:
    BOOL CMainFrame::OnCreateClient( LPCREATESTRUCT /*lpcs*/,CCreateContext* pContext)
    {
      m_wndSplitter.CreateStatic( this, 2, 1 );
      m_wndSplitter.CreateView( 0, 0, RUNTIME_CLASS( CMyListView1 ), CSize(0,200 ), pContext );
      m_wndSplitter.CreateView( 1, 0, RUNTIME_CLASS( CMyListView2), CSize( 0, 200 ), pContext );

        CMyListView *pView = (CMyListView *) m_wndSplitter.GetPane( 0, 0 );
        pView->SetUniqueName( "MYVIEW1" );
        pView = (CMyListView *) m_wndSplitter.GetPane( 1, 0 );
        pView->SetUniqueName( "MYVIEW2" );
        return true;
    }这样就可以显示出来了。
      

  7.   

    bati2003() 你的程序是不是给两视图换个名字,你做的可能是以运行就显示两且分视图,但我想要的是点击菜单下的按钮时,出现一个框架
    void CMainFrame::OnChartOut() 
    {
    // TODO: Add your command handler code here CDocTemplate* pTemplate=((CMyApp*)AfxGetApp())->pDocTemplate;
    pTemplate->OpenDocumentFile(NULL);
    return;
    }
    可以打开一个文档,但没法将两视图都打开
      

  8.   

    不甚明白楼主的意思!
    既然所有拆分窗口总是可见的,那么通过菜单控制它们的显示/隐藏有何意义呢!自相矛盾呀!我猜你的真实意图是想通过菜单实现不同视图的切换吧?(压根不用拆分窗口!)我给你一段经典代码:
    //ON_COMMAND(ID_SWITCH_VIEW1,OnSwitchView1)
    //ON_COMMAND(ID_SWITCH_VIEW2,OnSwitchView2)CDoubleFrame_CApp::OnSwitchView1()
    {
       EnterSpecialSystem("Tree");
    }
    CDoubleFrame_CApp::OnSwitchView2()
    {
       EnterSpecialSystem("Form");
    }
    BOOL CDoubleFrame_CApp::EnterSpecialSystem(const CString& sTargetSystem)
    {
    CDocTemplate* curTemplate;
    CString sDocName;
    POSITION pos=GetFirstDocTemplatePosition();
    while(pos!=NULL)
    {
    curTemplate=GetNextDocTemplate(pos);
    if(curTemplate!=NULL)
    {
    curTemplate->GetDocString(sDocName,CDocTemplate::docName);
    TRACE("%s\n",sDocName);
    if(sDocName==sTargetSystem)
    {
    curTemplate->OpenDocumentFile(NULL);
    return TRUE;
    }
    }
    }
    return FALSE;
    }}
      

  9.   

    非常感谢 mtsh(清风华仔) ,你说的对我很有帮助。
    但我想你还是不明白我的意思,我做的程序因为报表只是其中的一部分
    所以我想把它在一个菜单下实现,即点击一个菜单,出现象资源管理器那样的视图
    资源管理器也是点击文件夹菜单出现的。我想知道的也就是这文件夹按钮下的程序怎样编。
      

  10.   

    说明一下,我( sweengirl(爱热闹的人) )没分了借用anoia77(独行者77++lover78) 的号用一下
      

  11.   

    哦,这样啊!Follow me:
    方法一:通过((CMainFrame *)m_pMainWnd)->m_Spliterr.GetPane(...)
    在CMainFrame中定义三个View的指针指向三个View:m_pOne,m_pTwo,m_pThree;在CMainFrame(你自己的框架窗口,下同)中添加一个方法:TriggerTwo(/*相应参数*/);在View中定义一个方法Trigger进行相应的动作(你自己的功能)
    方法二:单击One的事件中写如下代码:
    (CMainFrame*)AfxGetMainWnd()-〉TriggerTwo()
    TriggerTwo中编写如下代码:
    m_pTwo->Trigger(/*相关参数*/)方法三:另外,也可在CViewTwo中自定义一个消息,实现你的功能,然后在CViewOne的事件中编写消息发送代码:
    SendMessage((CMainFrame*)AfxGetMainWnd()-〉m_pTwo->m_hWnd,WM_USER1,/*传过去的参数*/)