demoIe.cpp
上传用户:weisheen
上传日期:2022-07-09
资源大小:19390k
文件大小:4k
源码类别:

ActiveX/DCOM/ATL

开发平台:

Visual C++

  1. // demoIe.cpp : Defines the class behaviors for the application.
  2. //
  3. #include "stdafx.h"
  4. #include "demoIe.h"
  5. #include "demoIeDlg.h"
  6. #include <initguid.h>
  7. #include "DemoIe_i.c"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CDemoIeApp
  15. BEGIN_MESSAGE_MAP(CDemoIeApp, CWinApp)
  16. //{{AFX_MSG_MAP(CDemoIeApp)
  17. // NOTE - the ClassWizard will add and remove mapping macros here.
  18. //    DO NOT EDIT what you see in these blocks of generated code!
  19. //}}AFX_MSG
  20. ON_COMMAND(ID_HELP, CWinApp::OnHelp)
  21. END_MESSAGE_MAP()
  22. /////////////////////////////////////////////////////////////////////////////
  23. // CDemoIeApp construction
  24. CDemoIeApp::CDemoIeApp()
  25. {
  26. // TODO: add construction code here,
  27. // Place all significant initialization in InitInstance
  28. }
  29. /////////////////////////////////////////////////////////////////////////////
  30. // The one and only CDemoIeApp object
  31. CDemoIeApp theApp;
  32. /////////////////////////////////////////////////////////////////////////////
  33. // CDemoIeApp initialization
  34. BOOL CDemoIeApp::InitInstance()
  35. {
  36. if (!InitATL())
  37. return FALSE;
  38. AfxEnableControlContainer();
  39. CCommandLineInfo cmdInfo;
  40. ParseCommandLine(cmdInfo);
  41. if (cmdInfo.m_bRunEmbedded || cmdInfo.m_bRunAutomated)
  42. {
  43. return TRUE;
  44. }
  45. // Standard initialization
  46. // If you are not using these features and wish to reduce the size
  47. //  of your final executable, you should remove from the following
  48. //  the specific initialization routines you do not need.
  49. #ifdef _AFXDLL
  50. Enable3dControls(); // Call this when using MFC in a shared DLL
  51. #else
  52. Enable3dControlsStatic(); // Call this when linking to MFC statically
  53. #endif
  54. CDemoIeDlg dlg;
  55. m_pMainWnd = &dlg;
  56. int nResponse = dlg.DoModal();
  57. if (nResponse == IDOK)
  58. {
  59. // TODO: Place code here to handle when the dialog is
  60. //  dismissed with OK
  61. }
  62. else if (nResponse == IDCANCEL)
  63. {
  64. // TODO: Place code here to handle when the dialog is
  65. //  dismissed with Cancel
  66. }
  67. // Since the dialog has been closed, return FALSE so that we exit the
  68. //  application, rather than start the application's message pump.
  69. return FALSE;
  70. }
  71. CDemoIeModule _Module;
  72. BEGIN_OBJECT_MAP(ObjectMap)
  73. END_OBJECT_MAP()
  74. LONG CDemoIeModule::Unlock()
  75. {
  76. AfxOleUnlockApp();
  77. return 0;
  78. }
  79. LONG CDemoIeModule::Lock()
  80. {
  81. AfxOleLockApp();
  82. return 1;
  83. }
  84. LPCTSTR CDemoIeModule::FindOneOf(LPCTSTR p1, LPCTSTR p2)
  85. {
  86. while (*p1 != NULL)
  87. {
  88. LPCTSTR p = p2;
  89. while (*p != NULL)
  90. {
  91. if (*p1 == *p)
  92. return CharNext(p1);
  93. p = CharNext(p);
  94. }
  95. p1++;
  96. }
  97. return NULL;
  98. }
  99. int CDemoIeApp::ExitInstance()
  100. {
  101. if (m_bATLInited)
  102. {
  103. _Module.RevokeClassObjects();
  104. _Module.Term();
  105. CoUninitialize();
  106. }
  107. return CWinApp::ExitInstance();
  108. }
  109. BOOL CDemoIeApp::InitATL()
  110. {
  111. m_bATLInited = TRUE;
  112. #if _WIN32_WINNT >= 0x0400
  113. HRESULT hRes = CoInitializeEx(NULL, COINIT_MULTITHREADED);
  114. #else
  115. HRESULT hRes = CoInitialize(NULL);
  116. #endif
  117. if (FAILED(hRes))
  118. {
  119. m_bATLInited = FALSE;
  120. return FALSE;
  121. }
  122. _Module.Init(ObjectMap, AfxGetInstanceHandle());
  123. _Module.dwThreadID = GetCurrentThreadId();
  124. LPTSTR lpCmdLine = GetCommandLine(); //this line necessary for _ATL_MIN_CRT
  125. TCHAR szTokens[] = _T("-/");
  126. BOOL bRun = TRUE;
  127. LPCTSTR lpszToken = _Module.FindOneOf(lpCmdLine, szTokens);
  128. while (lpszToken != NULL)
  129. {
  130. if (lstrcmpi(lpszToken, _T("UnregServer"))==0)
  131. {
  132. _Module.UpdateRegistryFromResource(IDR_DEMOIE, FALSE);
  133. _Module.UnregisterServer(TRUE); //TRUE means typelib is unreg'd
  134. bRun = FALSE;
  135. break;
  136. }
  137. if (lstrcmpi(lpszToken, _T("RegServer"))==0)
  138. {
  139. _Module.UpdateRegistryFromResource(IDR_DEMOIE, TRUE);
  140. _Module.RegisterServer(TRUE);
  141. bRun = FALSE;
  142. break;
  143. }
  144. lpszToken = _Module.FindOneOf(lpszToken, szTokens);
  145. }
  146. if (!bRun)
  147. {
  148. m_bATLInited = FALSE;
  149. _Module.Term();
  150. CoUninitialize();
  151. return FALSE;
  152. }
  153. hRes = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER, 
  154. REGCLS_MULTIPLEUSE);
  155. if (FAILED(hRes))
  156. {
  157. m_bATLInited = FALSE;
  158. CoUninitialize();
  159. return FALSE;
  160. }
  161. return TRUE;
  162. }