双击一个MFC MDI应用程序创建的文件,打开该MFC MDI应用程序。再双击另外一个由该MFC MDI应用程序创建的文件,又在另外的窗口中打开了该应用程序。在操作系统中,创建了两个该应用程序的实例。
如何才能只在操作系统中创建一个该应用程序对象的实例呢?也就是第二次打开文件时,在已创建的应用程序实例中进行打开,而不再重新创建新的。多谢!!!

解决方案 »

  1.   

    你的意思是说只打开一个vc?资源管理器-》文件夹选项-》文件类型-》dws文件-》高级-》编辑-》勾上使用dde
      

  2.   

    这其实就是为你的mdi应用程序做限制,限制只允许存在一个实例,至于如何实现,网上有好多例子,最通用的方法就是采用mutex来限制
      

  3.   

    谢谢,lixiaosan(小三),但我是希望能修改MFC应用程序以支持该功能,而不是通过设置文件夹选项而达到该功能。
      

  4.   

    多谢, flyelf(空谷清音) !
    能提供一个实现的例子吧?万分感谢!!!
      

  5.   

    HANDLE hSem = 0;
    BOOL CYourApp::InitInstance()
    {    hSem = CreateSemaphore (NULL, 1, 1, "JustOneDispatch");
        if (GetLastError() == ERROR_ALREADY_EXISTS) {
            CloseHandle (hSem); hSem = 0;        HWND hwnd = FindWindow (CLASS_NAME, MAIN_WINDOW_NAME);
            BringWindowToTop (hwnd);
            ShowWindow (hwnd, SW_RESTORE);        return TRUE;
        }
        ......
    }int CYourApp::ExitInstance() 
    {
        if (hSem) {
            CloseHandle (hSem); hSem = 0;
        }
        ........
    }
      

  6.   

    bool Init()
    {
    // Create the named mutex
    HANDLE mutex = CreateMutex(NULL, FALSE, mutexname);
    if (mutex == NULL)
    return FALSE; // 检测Mutex是否存在,即名为“mutexname”的Mutex是否已经被创建
    if (GetLastError() == ERROR_ALREADY_EXISTS)
    return FALSE;    //说明以前已经创建,返回假 return TRUE;
    }
      

  7.   

    HANDLE mutex = CreateMutex(NULL, FALSE, mutexname);mutexname  是指mutex的名字,这应该传一个字符串
      

  8.   

    多谢 zxyjyzxyjy(星星)和zhenzhihy(新手)!!!
    现在已实现程序的第二个实例启动时,将第一个实例激活并使第二个实例退出。但又如何实现将第二次选择要打开的文件在已创建的第一个实例中进行打开呢(MFC MDI)?最好有实例,万分感谢!!!