请问如何在多文档类型的MFC工程中在一定情况下,只允许用户打开一个窗口?

解决方案 »

  1.   

    //Ö÷¡¡¡¡Ì⣺  MDI ÈçºÎÏÞÖÆÆäÖ»´ò¿ªÒ»¸öÎĵµ£¿ 
    //»Ø¸´ÈË£º masterz() (  ) ÐÅÓþ£º98  2002-04-16 14:20:00  µÃ·Ö:0   
    //  override OnFileOpen and OnFileNew
    void CsinglemdiApp::OnFileOpen(void)
    {
    POSITION doctempos=GetFirstDocTemplatePosition( );
    bool bdocopen=false;
    while(doctempos)
    {
    CDocTemplate* pdoctemp= GetNextDocTemplate( doctempos );
    POSITION docpos=pdoctemp->GetFirstDocPosition();
    if(docpos)
    {
    bdocopen =true;
    break;
    }
    }
    if(bdocopen)
    return;
    CWinApp::OnFileOpen();
    }void CsinglemdiApp::OnFileNew(void)
    { POSITION doctempos=GetFirstDocTemplatePosition( );
    bool bdocopen=false;
    while(doctempos)
    {
    CDocTemplate* pdoctemp= GetNextDocTemplate( doctempos );
    POSITION docpos=pdoctemp->GetFirstDocPosition();
    if(docpos)
    {
    bdocopen =true;
    break;
    }
    }
    if(bdocopen)
    return; CWinApp::OnFileNew();
    }
    //change message map to use overrided function
    BEGIN_MESSAGE_MAP(CsinglemdiApp, CWinApp)
    ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
    // Standard file based document commands
    ON_COMMAND(ID_FILE_NEW, OnFileNew) //change from CWinApp::OnFileNew to OnFileNew
    ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
    // Standard print setup command
    ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
    END_MESSAGE_MAP()
      

  2.   

    首先非常感谢masterz() 
    我将文件菜单上的打开和新建菜单项删除了
    另外在工具栏中自己增加了一个按钮,希望在没有窗口时,按这个按钮能
    产生一个窗口.如果已打开了一个窗口时,就不允许在产生窗口.
    我将你的方法试了一下.但是我发现这两个函数没有被调用.不知为什么?