OnlyOneInst.cpp
上传用户:xsxdsb
上传日期:2009-12-14
资源大小:672k
文件大小:3k
源码类别:

书籍源码

开发平台:

Visual C++

  1. // OnlyOneInst.cpp : Defines the class behaviors for the application.
  2. //
  3. #include "stdafx.h"
  4. #include "OnlyOneInst.h"
  5. #include "OnlyOneInstDlg.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // COnlyOneInstApp
  13. BEGIN_MESSAGE_MAP(COnlyOneInstApp, CWinApp)
  14. //{{AFX_MSG_MAP(COnlyOneInstApp)
  15. // NOTE - the ClassWizard will add and remove mapping macros here.
  16. //    DO NOT EDIT what you see in these blocks of generated code!
  17. //}}AFX_MSG
  18. ON_COMMAND(ID_HELP, CWinApp::OnHelp)
  19. END_MESSAGE_MAP()
  20. /////////////////////////////////////////////////////////////////////////////
  21. // COnlyOneInstApp construction
  22. COnlyOneInstApp::COnlyOneInstApp()
  23. {
  24. // TODO: add construction code here,
  25. // Place all significant initialization in InitInstance
  26. }
  27. /////////////////////////////////////////////////////////////////////////////
  28. // The one and only COnlyOneInstApp object
  29. COnlyOneInstApp theApp;
  30. /////////////////////////////////////////////////////////////////////////////
  31. // COnlyOneInstApp initialization
  32. BOOL COnlyOneInstApp::InitInstance()
  33. {
  34. if (!FirstInstance())
  35. return FALSE; //已经有实例存在了,退出
  36. AfxEnableControlContainer();
  37. // Standard initialization
  38. // If you are not using these features and wish to reduce the size
  39. //  of your final executable, you should remove from the following
  40. //  the specific initialization routines you do not need.
  41. #ifdef _AFXDLL
  42. Enable3dControls(); // Call this when using MFC in a shared DLL
  43. #else
  44. Enable3dControlsStatic(); // Call this when linking to MFC statically
  45. #endif
  46. COnlyOneInstDlg dlg;
  47. m_pMainWnd = &dlg;
  48. int nResponse = dlg.DoModal();
  49. if (nResponse == IDOK)
  50. {
  51. // TODO: Place code here to handle when the dialog is
  52. //  dismissed with OK
  53. }
  54. else if (nResponse == IDCANCEL)
  55. {
  56. // TODO: Place code here to handle when the dialog is
  57. //  dismissed with Cancel
  58. }
  59. // Since the dialog has been closed, return FALSE so that we exit the
  60. //  application, rather than start the application's message pump.
  61. return FALSE;
  62. }
  63. BOOL COnlyOneInstApp::FirstInstance()
  64. {
  65.   CWnd *pWndPrev, *pWndChild;
  66.   
  67.   //根据主窗口类名和主窗口名判断是否已经有实例存在了
  68.   if (pWndPrev = CWnd::FindWindow(_T("#32770"),"OnlyOne"))
  69.   {//如果存在就将其激活,并显示出来
  70.   
  71.   pWndChild = pWndPrev->GetLastActivePopup(); 
  72.   
  73.   //如果是最小化的就还原窗口
  74.   if (pWndPrev->IsIconic()) 
  75.   pWndPrev->ShowWindow(SW_RESTORE);      
  76.   
  77.   pWndChild->SetForegroundWindow();         
  78.  
  79.   return FALSE;                             
  80.   }
  81.   else
  82.   return TRUE;                             
  83. }