方法一:通过创建互斥对象
m_hHandleOne = ::CreateMutex(NULL, FALSE, ONE);*/
if(GetLastError()==ERROR_ALREADY_EXISTS)
{
AfxMessageBox("应用程序已经在运行!");
return FALSE;
}
方法二:通过注册主窗口类
在CWinApp 类中
BOOL CSurveyDProcessApp::InitApplication()
{
// TODO: Add your specialized code here and/or call the base class
// Base class version actually does nothing.
CWinApp::InitApplication();
// 以下用于防止加载多个实例.
// MSDN: How to Limit an MFC Application to a Single Instance
WNDCLASS wndcls;
// Start with NULL defaults.
memset(&wndcls, 0, sizeof(WNDCLASS));
wndcls.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
wndcls.hInstance = AfxGetInstanceHandle();
wndcls.lpfnWndProc = AfxWndProc;
wndcls.hbrBackground = HBRUSH(COLOR_WINDOW);
wndcls.lpszClassName = "SurveyDProcessMainFrame";
// Register new class and return result from ::RegisterClass().
return ::RegisterClass(&wndcls);
}
BOOL CSurveyDProcessApp::FirstInstance()
{
CWnd *PrevCWnd, *ChildCWnd;
if (PrevCWnd = CWnd::FindWindow("SurveyDProcessMainFrame", NULL))
{
ChildCWnd = PrevCWnd->GetLastActivePopup();
PrevCWnd->BringWindowToTop();
if (PrevCWnd->IsIconic())
PrevCWnd->ShowWindow(SW_RESTORE);
if (PrevCWnd != ChildCWnd)
ChildCWnd->BringWindowToTop();
return FALSE;
}
else
return TRUE; // First instance. Proceed as normal.
}
在主窗口CMainFrm 中
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CMDIFrameWnd::PreCreateWindow(cs) )
return FALSE;
cs.lpszClass = "SurveyDProcessMainFrame";
return TRUE;
}