我创建了多文档之后,除了系统自带的一个类,我添加了两个对话框,dialog1,dialog2(都是CFromView类化的);框架初始化的时候跳出窗口,让我选择“新建”dialog1,dialog2,和系统提供的一个默认类。我的问题是,在有多个类的时候,这个窗口能不显示吗?如何将我的dialog1,dialog2,在框架初始化的时候全部显示,并且将这些dialog和我的主菜单关联,随时选择显示和关闭??在线等。

解决方案 »

  1.   

    你说的想不显示的窗口是指哪个MDI的主框架窗口吗? --- 可以不显示,在APP类修改代码,让你的代码来控制显式。
    另一个关于dialog1,dialog2的显示问题,等同于问题1,你能控制了主窗体的显示,自然就能控制其他的,你先怎么显示都可以。
    另外,关于何时显示主框架,可以再app类中控制,也可以在mainframe中create函数前(也就是主框架显示前)调用你自己的对话框。
      

  2.   

    看 这里 关于CDocManagerEx的那部分
      

  3.   

    完全可行的,就是使用CMultiDocTemplate来控制。
    我做的一个项目就是这种要求,一进来就显示所有CFormView的MDI子窗口,不用用户选择什么的。
    项目不能给你,贴写代码给你参考吧,主要是在App的InitInstance中:        // 注册应用程序的文档模板。文档模板
    // 将用作文档、框架窗口和视图之间的连接

    //------------------------------ 上报信息 -----------------------------------
    m_pUnitReceivedDocTemp=new CMultiDocTemplate(IDR_FUNC_MENU_UNIT_RECEIVED,
    RUNTIME_CLASS(CUnitReceivedDoc),
    RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架
    RUNTIME_CLASS(CUnitReceivedView));
    if (!m_pUnitReceivedDocTemp)
    {
    ::MessageBox(NULL,_T("创建查UnitReceived模板失败!"),_T("严重错误"),MB_OK|MB_ICONSTOP);
    return FALSE;
    }
    AddDocTemplate(m_pUnitReceivedDocTemp); //注册到框架,框架负责销毁
    //------------------------------ 预编信息 -----------------------------------
    if(m_strMDITabsType.find(_T("P"))!=LSN_TString::npos)
    {
    m_pPrevEditDocTemp=new CMultiDocTemplate(IDR_FUNC_MENU_PREVEDIT,
    RUNTIME_CLASS(CPrevEditDoc),
    RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架
    RUNTIME_CLASS(CPrevEditView));
    if (!m_pPrevEditDocTemp)
    {
    ::MessageBox(NULL,_T("创建查PrevEdit模板失败!"),_T("严重错误"),MB_OK|MB_ICONSTOP);
    return FALSE;
    }
    AddDocTemplate(m_pPrevEditDocTemp); //注册到框架,框架负责销毁
    }//end if //------------------------------ 备选库 -----------------------------------
    m_pEditSpareDocTemp=new CMultiDocTemplate(IDR_FUNC_MENU_EDITSPARE,
    RUNTIME_CLASS(CEditSpareDoc),
    RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架
    RUNTIME_CLASS(CEditSpareView));
    if (!m_pEditSpareDocTemp)
    {
    ::MessageBox(NULL,_T("创建查EditSpare模板失败!"),_T("严重错误"),MB_OK|MB_ICONSTOP);
    return FALSE;
    }
    AddDocTemplate(m_pEditSpareDocTemp); //注册到框架,框架负责销毁 //------------------------------ 全部 -----------------------------------
    m_pAllInfoDocTemp=new CMultiDocTemplate(IDR_FUNC_MENU_ALLINFO,
    RUNTIME_CLASS(CAllInfoDoc),
    RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架
    RUNTIME_CLASS(CAllInfoView));
    if (!m_pAllInfoDocTemp)
    {
    ::MessageBox(NULL,_T("创建查AllInfo模板失败!"),_T("严重错误"),MB_OK|MB_ICONSTOP);
    return FALSE;
    }
    AddDocTemplate(m_pAllInfoDocTemp); //注册到框架,框架负责销毁
    //------------------------------ 自己 -----------------------------------
    m_pMyselfInfoDocTemp=new CMultiDocTemplate(IDR_FUNC_MENU_MYSELFINFO,
    RUNTIME_CLASS(CMyselfInfoDoc),
    RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架
    RUNTIME_CLASS(CMyselfInfoView));
    if (!m_pMyselfInfoDocTemp)
    {
    ::MessageBox(NULL,_T("创建查MyselfInfo模板失败!"),_T("严重错误"),MB_OK|MB_ICONSTOP);
    return FALSE;
    }
    AddDocTemplate(m_pMyselfInfoDocTemp); //注册到框架,框架负责销毁
    //------------------------------ 汇总统计 -----------------------------------
    m_pSumInfoDocTemp=new CMultiDocTemplate(IDR_FUNC_MENU_SUMINFO,
    RUNTIME_CLASS(CSumInfoDoc),
    RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架
    RUNTIME_CLASS(CSumInfoView));
    if (!m_pSumInfoDocTemp)
    {
    ::MessageBox(NULL,_T("创建查SumInfo模板失败!"),_T("严重错误"),MB_OK|MB_ICONSTOP);
    return FALSE;
    }
    AddDocTemplate(m_pSumInfoDocTemp); //注册到框架,框架负责销毁
    技术上,建议你参考一下《MFC经典问答》,里面有几个问题谈到了如何使用CMultiDocTemplate进行多文档的控制和管理
      

  4.   

    注册和添加CMultiDocTemplate之后,需要使用它们来打开MDI子窗口
    可以参考的代码如下,也在App的InitInstance中:
    里面有些授权控制的逻辑,接上面的代码段,我就懒得删除这些逻辑了,你将就着看看吧//打开功能页面,不能关闭,受权限控制
    std::pair<LSN_TString,size_t> pair_mdi_tab_index;
    size_t nCurShowTabCount=0,nMDI_TabCount=m_strMDITabsType.size();
    if(m_strMDITabsType.find(_T("R"))!=LSN_TString::npos)
    {
    pair_mdi_tab_index.first=_T("R");
    pair_mdi_tab_index.second=nCurShowTabCount;
    m_mapCurMDITabIndex.insert(pair_mdi_tab_index); //记录相应的Tab索引
    ++nCurShowTabCount;
    if(nCurShowTabCount>=nMDI_TabCount)
    m_bBeenInitedBasicFace=true; //最后view负责触发初始化完成,并可直接装载数据
    m_pUnitReceivedDocTemp->OpenDocumentFile(NULL);
    }//end if if(m_strMDITabsType.find(_T("P"))!=LSN_TString::npos)
    {
    pair_mdi_tab_index.first=_T("P");
    pair_mdi_tab_index.second=nCurShowTabCount;
    m_mapCurMDITabIndex.insert(pair_mdi_tab_index); //记录相应的Tab索引
    ++nCurShowTabCount;
    if(nCurShowTabCount>=nMDI_TabCount)
    m_bBeenInitedBasicFace=true; //最后view负责触发初始化完成,并可直接装载数据
    m_pPrevEditDocTemp->OpenDocumentFile(NULL);
    }//end if if(m_strMDITabsType.find(_T("E"))!=LSN_TString::npos)
    {
    pair_mdi_tab_index.first=_T("E");
    pair_mdi_tab_index.second=nCurShowTabCount;
    m_mapCurMDITabIndex.insert(pair_mdi_tab_index); //记录相应的Tab索引
    ++nCurShowTabCount;
    if(nCurShowTabCount>=nMDI_TabCount)
    m_bBeenInitedBasicFace=true; //最后view负责触发初始化完成,并可直接装载数据
    m_pEditSpareDocTemp->OpenDocumentFile(NULL);
    }//end if if(m_strMDITabsType.find(_T("A"))!=LSN_TString::npos)
    {
    pair_mdi_tab_index.first=_T("A");
    pair_mdi_tab_index.second=nCurShowTabCount;
    m_mapCurMDITabIndex.insert(pair_mdi_tab_index); //记录相应的Tab索引
    ++nCurShowTabCount;
    if(nCurShowTabCount>=nMDI_TabCount)
    m_bBeenInitedBasicFace=true; //最后view负责触发初始化完成,并可直接装载数据
    m_pAllInfoDocTemp->OpenDocumentFile(NULL);
    }//end if if(m_strMDITabsType.find(_T("M"))!=LSN_TString::npos)
    {
    pair_mdi_tab_index.first=_T("M");
    pair_mdi_tab_index.second=nCurShowTabCount;
    m_mapCurMDITabIndex.insert(pair_mdi_tab_index); //记录相应的Tab索引
    ++nCurShowTabCount;
    if(nCurShowTabCount>=nMDI_TabCount)
    m_bBeenInitedBasicFace=true; //最后view负责触发初始化完成,并可直接装载数据
    m_pMyselfInfoDocTemp->OpenDocumentFile(NULL);
    }//end if

    if(m_strMDITabsType.find(_T("S"))!=LSN_TString::npos)
    {
    pair_mdi_tab_index.first=_T("S");
    pair_mdi_tab_index.second=nCurShowTabCount;
    m_mapCurMDITabIndex.insert(pair_mdi_tab_index); //记录相应的Tab索引
    ++nCurShowTabCount;
    if(nCurShowTabCount>=nMDI_TabCount)
    m_bBeenInitedBasicFace=true; //最后view负责触发初始化完成,并可直接装载数据
    m_pSumInfoDocTemp->OpenDocumentFile(NULL);
    }//end if
      

  5.   

    小弟先试试chenrongjie 的方法