MDI结构。支持两种文档视图结构,一种为newdoc,一种为olddoc;当选择新建文档时会弹出一个对话框让选择是新建newdoc还是新建olddoc。问题:想在建立一个newdoc后,再新建文档弹出的对话框中newdoc选项变灰,即只能同时建立一个newdoc文档!请高手解答!谢谢!

解决方案 »

  1.   

    就是说程序本身是基于MDI,同时又支持两个文档模板类!而我想达到的是,对于其中一个文档模板只能建立一次!能解决问题者可以给100分(另开贴);参与问题讨论者也会有分!(看来是要下血本了:))
      

  2.   

    文档模板确实只有生成一次,在APP的INITIALIZE中pDocTemplate = new CMultiDocTemplate(....);AddDocTemplate(pDocTemplate);
    你的目的是不是每钟文档只能产生一个视图啊?
      

  3.   

    对的! finix(*_*) 
    应该也可以这么说。
      

  4.   

    非常谢谢 cbc(逍遥子) !
      

  5.   

    1)首先计算出每个文档模版打开的文档个数nOpenDocuments
    2)如果nOpenDocuments为1,则使新建灰掉这里提供一下计算文档个数的代码,我这里是一个文档模版的情况,int CXXXXApp::NumberOfOpenDocuments() const
    {
    int nOpenDocuments = 0;
    POSITION posTemplate = GetFirstDocTemplatePosition();
    while (posTemplate != NULL) 
    {
    CDocTemplate* pTemplate = GetNextDocTemplate(posTemplate);
    ASSERT(pTemplate->IsKindOf(RUNTIME_CLASS(CDocTemplate)));
    POSITION posDoc = pTemplate->GetFirstDocPosition();
    while (posDoc != NULL) 
    {
    CDocument* pDoc = pTemplate->GetNextDoc(posDoc);
    ++nOpenDocuments;
    }
    }

    return nOpenDocuments;
    }希望对你有所帮助!
      

  6.   

    重载新建void CImageProcessApp::OnUpdateFileNew(CCmdUI* pCmdUI) 
    {
    pCmdUI->Enable(NumberOfOpenDocuments()==0);
    }
      

  7.   

    CString sExt;
    pTemplate->GetDocString(sExt, CDocTemplate::filterExt) ;
    然后将sExt和你想建立的模板名字比较
      

  8.   

    最笨的方法是:
    建一全程可以访问的变量比如放在CAPP类的PUBLIC变量声明中:
    ENUM CREATE_TYPE{CR_NEW,CR_OLD,CR_ALL};public:
    CREATE_TYPE ct ;在InitInstance中 ct = CR_ALL;然后当你在NEW菜单中弹出一个窗口让用户选择时, 
    CYouApp * m_app = (CYouApp *)AfxGetapp();switch(m_app->ct)
    {
     case CR_all :全都可以创建 break;
     case CR_new :只能创建新的 break;
     case CR_old :只能创建旧的 break;
     default :break;
    }当用户点选了相关按钮后再设成相关的值.
      

  9.   

    最笨的方法是:
    建一全程可以访问的变量比如放在CAPP类的PUBLIC变量声明中:
    ENUM CREATE_TYPE{CR_NEW,CR_OLD,CR_ALL};public:
    CREATE_TYPE ct ;在InitInstance中 ct = CR_ALL;然后当你在NEW菜单中弹出一个窗口让用户选择时, 
    CYouApp * m_app = (CYouApp *)AfxGetapp();switch(m_app->ct)
    {
     case CR_all :全都可以创建 break;
     case CR_new :只能创建新的 break;
     case CR_old :只能创建旧的 break;
     default :break;
    }当用户点选了相关按钮后再设成相关的值,比如:
    用户点了"创建新"后,就把 m_app->ct设为 CR_OLD
    用户点了"创建旧"后,就把 m_app->ct设为 CR_NEW这样就不用判断和文档相关的内容了,也就是说,我们通过用户点击"创建新""创建旧"来做决定.