双击一个MFC MDI应用程序创建的文件,打开该MFC MDI应用程序。再双击另外一个由该MFC MDI应用程序创建的文件,又在另外的窗口中打开了该应用程序。在操作系统中,创建了两个该应用程序的实例。
如何才能只在操作系统中创建一个该应用程序对象的实例呢?也就是第二次打开文件时,在已创建的应用程序实例中进行打开,而不再重新创建新的。多谢!!!
如何才能只在操作系统中创建一个该应用程序对象的实例呢?也就是第二次打开文件时,在已创建的应用程序实例中进行打开,而不再重新创建新的。多谢!!!
能提供一个实现的例子吧?万分感谢!!!
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;
}
........
}
{
// 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;
}
现在已实现程序的第二个实例启动时,将第一个实例激活并使第二个实例退出。但又如何实现将第二次选择要打开的文件在已创建的第一个实例中进行打开呢(MFC MDI)?最好有实例,万分感谢!!!