我在编写一个MDI程序,程序的各种数据是由一个工程来管理的,类似于VC中的工程。我想让我的程序一次只打开一个工程,也就是说,在新建或打开工程时,如果已有工程打开,就将其关闭(必要时还要提示用户存盘),然后再新建或打开工程,请问这一整套操作该如何实施?是否有现成的源码?请各位指点,谢谢了!

解决方案 »

  1.   

    楼主说的意思是不是指在“打开”对话框中仅显示一个文档类型,那可能就需要你自己用CFileDialog编写了
      

  2.   

    你可以写一个类,接管CMyApp中的OnFileNew等命令函数,比如我写过一个,
    CProjectManager(以下简称CPro),我在CPro中作了一个CMapStringToOb m_listDocTemplate成员,看名字也知道什么意思了把,在CMyApp的InitInstance里。。打字真烦简单说了吧:
    因为你接管了OnFileNew,所以当点几菜单时可以调用你的函数,你可以显示一个新建文件类型的对话框,m_listDocTemplate的意思是以后我可以采用OpenDocument("c:\\1.txt","TextEdit");或OpenDocument("c:\\1.cpp", "CodeEdit");来用不同的视图打开不同类型的文档,算了太难打了,你根据这个思路就知道了,反正CWinApp的这些文件操作最后也让CDocManager给接管了,为防止错误,建议在给m_listDocTemplate添加项时给CMyApp也添加。当然最后你全部接管了以后,就不用管DocManager了。如果你想打开Project File时不显示一个ChildFrame,这中方式刚好可以解决。
      

  3.   

    打了半天,我自己看都有点不明白,写点代码补充:
    class CProjectManager
    {
        CProjectManager();
        ~CProjectManager();    OpenDocument(LPCTSTR lpszFileName, LPCTSTR lpszDocTemplateName)
           {//Get DocTemplate pointer to pDocTemplate;
            //use pDocTemplate open file};    InitDocTemplates();//Calls in CMyApp()::InitInstance()
        OnFileNew();//CMyApp::OnFileNew(){GetProjectManager()->OnFileNew();}
    .....
        CMapStringToOb  m_listDocTemplate;//Why did I use StringToOb?
             //Because I Want to load settings from XML, and my XML settings file like this:
             ...
               <Type ext="cpp" defaultTemplate="CodeEdit" otherTemplate="TextEdit|Browser"/>
             ...
    我的英文有点烂,不过还是比这台电脑上的输入法好用点。