SouiInit.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. 
  2. class SUserObjectDefaultRegister : public TObjRefImpl<ISystemObjectRegister>
  3. {
  4. public:
  5. void RegisterWindows(SObjectFactoryMgr *objFactory) const;
  6. };
  7. //Soui 加载器
  8. class CSouiLoader
  9. {
  10. SApplication *theApp;
  11. SComMgr *pComMgr;
  12. public:
  13. //通过过传入一个ISystemObjectRegister对像来注册用户控件,其余参数和SApplication的参数一致
  14. CSouiLoader(HINSTANCE hInst,ISystemObjectRegister &pUserObjRegister=SUserObjectDefaultRegister(), LPCTSTR pszHostClassName = _T("DSPROYX"))
  15. :theApp(NULL),pComMgr(NULL)
  16. {
  17. pComMgr = new SComMgr;
  18. CAutoRefPtr<SOUI::IImgDecoderFactory> pImgDecoderFactory;
  19. CAutoRefPtr<SOUI::IRenderFactory> pRenderFactory;
  20. BOOL bLoaded = pComMgr->CreateRender_GDI((IObjRef**)&pRenderFactory);
  21. SASSERT_FMT(bLoaded, _T("load interface [render] failed!"));
  22. bLoaded = pComMgr->CreateImgDecoder((IObjRef**)&pImgDecoderFactory);
  23. SASSERT_FMT(bLoaded, _T("load interface [%s] failed!"), _T("imgdecoder"));
  24. pRenderFactory->SetImgDecoderFactory(pImgDecoderFactory);
  25. theApp = new SApplication(pRenderFactory, hInst, pszHostClassName);
  26. //注册用户自定义的东西
  27. pUserObjRegister.RegisterLayouts(theApp);
  28. pUserObjRegister.RegisterSkins(theApp);
  29. pUserObjRegister.RegisterWindows(theApp);
  30. pUserObjRegister.RegisterInterpolator(theApp);
  31. }
  32. ~CSouiLoader()
  33. {
  34. if (theApp)
  35. delete theApp;
  36. if (pComMgr)
  37. delete pComMgr;
  38. }
  39. SApplication *GetApp()
  40. {
  41. SASSERT(theApp);
  42. return theApp;
  43. }
  44. SComMgr *GetComMgr()
  45. {
  46. SASSERT(pComMgr);
  47. return pComMgr;
  48. }
  49. };
  50. //初使化资源加载路径
  51. void InitDir(TCHAR *Path=NULL);
  52. void InitSystemRes(SApplication *theApp, SComMgr *pComMgr);
  53. void InitUserRes(SApplication * theApp, SComMgr *pComMgr);
  54. template<class T>
  55. int Run(SApplication *theApp)
  56. {
  57. T dlgMain;
  58. dlgMain.Create(GetActiveWindow(),WS_POPUPWINDOW);
  59. dlgMain.SendMessage(WM_INITDIALOG);
  60. dlgMain.CenterWindow(dlgMain.m_hWnd);
  61. dlgMain.ShowWindow(SW_SHOWNORMAL);
  62. return theApp->Run(dlgMain.m_hWnd);
  63. }