各位GGJJ,我想把“Outlook式样界面菜单和页面控制”的那个源程序修改成这种方式的:每当我单击一下左边的Outlook菜单按钮,在Outlook菜单右边显示出相应的窗体(这个窗体要填满Outlook菜单右边的client area.我还得在这个窗体上布上许多近件)。菜单按钮的消息响应在COutbarViewCOutbarView::OnOutbarNotify(UINT lParam, LONG wParam)那。我该如何创建这些相应的窗体,以便在单击菜单按钮时显示出来。
请问各位GGJJ怎么实现这?
Thanks very much.

解决方案 »

  1.   

    http://community.csdn.net/Expert/topic/4498/4498524.xml?temp=.817135
    跟上面的那个问题差不多。
      

  2.   

    to mintwlf(Programmer) :
      时间来得及的话,也无妨,我的想法是想先把这个界面给完成,等项目完成后我再去详细研究多文档编程。
      各位帮帮忙吧。集思广益嘛。
      

  3.   

    to mintwlf(Programmer) :
      现在我想单击左边的按钮时,在右面创建窗口。
    1->在Wizard中,可能要选择Formview的。
    2->我是不是要先创建好相应的窗口资源?然后在单击左边的按钮时动态调用?
    3>因为左边的一栏(左边的按钮栏),我该怎么使窗口在剩下的空间中显示?(填充满剩下的空间)
    因为本人以前一直用single dialog的。所以对于这方面真的很菜。
    thanks.
      

  4.   

    1->在Wizard中,可能要选择Formview的。
    2->我是不是要先创建好相应的窗口资源?然后在单击左边的按钮时动态调用?
    可以这么做,但是通常都是直接用Create函数创建窗口3>因为左边的一栏(左边的按钮栏),我该怎么使窗口在剩下的空间中显示?(填充满剩下的空间)
    如果你的主框架是FrameWnd,你可以使用RepositionBars把剩下的空间得到,然后用SetWindowPos把你的窗口填进去就行了。
      

  5.   

    to mintwlf(Programmer) :
      RepositionBars函数怎么用?以下是我的code,请帮我看看。
      void CMainFrame::SwitchToForm(int ID_FORM)
    {
    //CDocument* pDoc = GetActiveDocument();
        CView *pOldActiveView=GetActiveView();             //保存旧视图
        CView *pNewActiveView=(CView*)GetDlgItem(ID_FORM);   //取得新视图
        if(pNewActiveView==NULL)
        {
            switch(ID_FORM)
            {
            case IDD_RS232CONFIG:
    TRACE("Create View\n");
                pNewActiveView=(CView*)new CSetjigOption;
                break;
            case IDD_DATAFLASH:
                pNewActiveView=(CView*)new CDataFlash;
                break;
            case IDD_CALIBRATE:
                pNewActiveView=(CView*)new CCalibrateCell;
                break;
            case IDD_BATTERYTEST_FORM:
                pNewActiveView=(CView*)new CBatteryTestView;
                break;
            }
            CCreateContext context;   //将文挡和视图相连
            context.m_pCurrentDoc=pOldActiveView->GetDocument();
    pNewActiveView->Create(NULL,NULL,WS_BORDER|WS_CHILD,
                CFrameWnd::rectDefault,this,ID_FORM,&context);
    pNewActiveView->OnInitialUpdate();
        }
        //RepositionBars(0,0xffff,AFX_IDW_PANE_FIRST,
        SetActiveView(pNewActiveView);        //改变活动的视图
        pNewActiveView->ShowWindow(SW_SHOW);  //显示新的视图
        pOldActiveView->ShowWindow(SW_HIDE);  //隐藏旧的视图
    if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CSetjigOption))
    pOldActiveView->SetDlgCtrlID(IDD_RS232CONFIG);

    else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CDataFlash))
    pOldActiveView->SetDlgCtrlID(IDD_DATAFLASH);

    else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CCalibrateCell))
    pOldActiveView->SetDlgCtrlID(IDD_CALIBRATE);

    else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CBatteryTestView))
    pOldActiveView->SetDlgCtrlID(IDD_BATTERYTEST_FORM);
        pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
        delete pOldActiveView;   //删除旧视图
    RecalcLayout();
    }
      

  6.   

    where is VC-MVP???
    if i can't finish this UI,so that i will be delaied here for some time.i can't start to build function code.
    help me.
      

  7.   

    (浪人)的解答很有参考价值。另外,MSDN有个例子COLLECT是切换界面的。