SouiInit.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. #include "stdafx.h"
  2. #include "SouiInit.h"
  3. //从PE文件加载,注意从文件加载路径位置
  4. #define RES_TYPE 0
  5. //#define SYSRES_TYPE 0
  6. // #define RES_TYPE 0 //PE
  7. // #define RES_TYPE 1 //ZIP
  8. // #define RES_TYPE 2 //7z
  9. // #define RES_TYPE 2 //文件
  10. //去掉多项支持,以免代码显得混乱
  11. #if (RES_TYPE==1)
  12. #include "resprovider-zip\zipresprovider-param.h"
  13. #else
  14. #if (RES_TYPE==2)
  15. #include "resprovider-7zip\zip7resprovider-param.h"
  16. #endif
  17. #endif
  18. #ifdef _DEBUG
  19. #define SYS_NAMED_RESOURCE _T("soui-sys-resourced.dll")
  20. #else
  21. #define SYS_NAMED_RESOURCE _T("soui-sys-resource.dll")
  22. #endif
  23. //定义唯一的一个R,UIRES对象,ROBJ_IN_CPP是resource.h中定义的宏。
  24. ROBJ_IN_CPP
  25. void InitDir(TCHAR *Path)
  26. {
  27. if (Path == NULL)
  28. {
  29. TCHAR szCurrentDir[MAX_PATH] = { 0 };
  30. GetModuleFileName(NULL, szCurrentDir, sizeof(szCurrentDir));
  31. LPTSTR lpInsertPos = _tcsrchr(szCurrentDir, _T('\\'));
  32. #ifdef _DEBUG
  33. _tcscpy(lpInsertPos + 1, _T("..\\SProxy"));
  34. #else
  35. _tcscpy(lpInsertPos + 1, _T("\0"));
  36. #endif
  37. SetCurrentDirectory(szCurrentDir);
  38. }
  39. else
  40. SetCurrentDirectory(Path);
  41. }
  42. void InitSystemRes(SApplication * theApp,SComMgr *pComMgr)
  43. {
  44. #ifdef _DEBUG
  45. //选择了仅在Release版本打包资源则系统资源在DEBUG下始终使用DLL加载
  46. {
  47. HMODULE hModSysResource = LoadLibrary(SYS_NAMED_RESOURCE);
  48. if (hModSysResource)
  49. {
  50. CAutoRefPtr<IResProvider> sysResProvider;
  51. CreateResProvider(RES_PE, (IObjRef**)&sysResProvider);
  52. sysResProvider->Init((WPARAM)hModSysResource, 0);
  53. theApp->LoadSystemNamedResource(sysResProvider);
  54. FreeLibrary(hModSysResource);
  55. }
  56. else
  57. {
  58. SASSERT(0);
  59. }
  60. }
  61. #else
  62. //从DLL加载系统资源
  63. {
  64. HMODULE hModSysResource = LoadLibrary(SYS_NAMED_RESOURCE);
  65. if (hModSysResource)
  66. {
  67. CAutoRefPtr<IResProvider> sysResProvider;
  68. CreateResProvider(RES_PE, (IObjRef**)&sysResProvider);
  69. sysResProvider->Init((WPARAM)hModSysResource, 0);
  70. theApp->LoadSystemNamedResource(sysResProvider);
  71. FreeLibrary(hModSysResource);
  72. }
  73. else
  74. {
  75. SASSERT(0);
  76. }
  77. }
  78. #endif
  79. }
  80. void InitUserRes(SApplication * theApp, SComMgr *pComMgr)
  81. {
  82. CAutoRefPtr<IResProvider> pResProvider;
  83. #ifdef _DEBUG
  84. //选择了仅在Release版本打包资源则在DEBUG下始终使用文件加载
  85. {
  86. CreateResProvider(RES_FILE, (IObjRef**)&pResProvider);
  87. BOOL bLoaded = pResProvider->Init((LPARAM)_T("uires"), 0);
  88. SASSERT(bLoaded);
  89. }
  90. #else
  91. {
  92. CreateResProvider(RES_PE, (IObjRef**)&pResProvider);
  93. BOOL bLoaded = pResProvider->Init((WPARAM)theApp->GetInstance(), 0);
  94. SASSERT(bLoaded);
  95. }
  96. #endif
  97. theApp->InitXmlNamedID(namedXmlID, ARRAYSIZE(namedXmlID), TRUE);
  98. theApp->AddResProvider(pResProvider);
  99. }
  100. void SUserObjectDefaultRegister::RegisterWindows(SObjectFactoryMgr * objFactory) const
  101. {
  102. #define RegWnd(wndClass) objFactory->TplRegisterFactory<wndClass>();
  103. //RegWnd(SBrowserTabCtrl)
  104. //RegWnd(CDropWnd)
  105. //RegWnd(SRelTabCtrl)
  106. //RegWnd(SWkeWebkit)
  107. //RegWnd(SEditEx)
  108. }