123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- // dui-demo.cpp : main source file
- //
- #include "stdafx.h"
- #include "MainDlg.h"
- #include "trayicon\SShellNotifyIcon.h"
- //从PE文件加载,注意从文件加载路径位置
- #define RES_TYPE 0
- //#define SYSRES_TYPE 0
- // #define RES_TYPE 0 //PE
- // #define RES_TYPE 1 //ZIP
- // #define RES_TYPE 2 //7z
- // #define RES_TYPE 2 //文件
- //去掉多项支持,以免代码显得混乱
- #if (RES_TYPE==1)
- #include "resprovider-zip\zipresprovider-param.h"
- #else
- #if (RES_TYPE==2)
- #include "resprovider-7zip\zip7resprovider-param.h"
- #endif
- #endif
- #ifdef _DEBUG
- #define SYS_NAMED_RESOURCE _T("soui-sys-resourced.dll")
- #else
- #define SYS_NAMED_RESOURCE _T("soui-sys-resource.dll")
- #endif
- #ifdef _DEBUG
- #pragma comment(lib,"lua-52d")
- #pragma comment(lib,"scriptmodule-luad")
- #else
- #pragma comment(lib,"lua-52")
- #pragma comment(lib,"scriptmodule-lua")
- #endif
- //定义唯一的一个R,UIRES对象,ROBJ_IN_CPP是resource.h中定义的宏。
- ROBJ_IN_CPP
- int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPTSTR lpstrCmdLine, int /*nCmdShow*/)
- {
- HRESULT hRes = OleInitialize(NULL);
- SASSERT(SUCCEEDED(hRes));
- int nRet = 0;
- SComMgr *pComMgr = new SComMgr;
- TCHAR szCurrentDir[MAX_PATH] = { 0 };
- GetModuleFileName(NULL, szCurrentDir, sizeof(szCurrentDir));
- LPTSTR lpInsertPos = _tcsrchr(szCurrentDir, _T('\\'));
- #ifdef _DEBUG
- _tcscpy(lpInsertPos + 1, _T("..\\AutoCompilation"));
- #else
- _tcscpy(lpInsertPos + 1, _T("\0"));
- #endif
- SetCurrentDirectory(szCurrentDir);
- {
- BOOL bLoaded = FALSE;
- CAutoRefPtr<SOUI::IImgDecoderFactory> pImgDecoderFactory;
- CAutoRefPtr<SOUI::IRenderFactory> pRenderFactory;
- bLoaded = pComMgr->CreateRender_GDI((IObjRef**)&pRenderFactory);
- SASSERT_FMT(bLoaded, _T("load interface [render] failed!"));
- bLoaded = pComMgr->CreateImgDecoder((IObjRef**)&pImgDecoderFactory);
- SASSERT_FMT(bLoaded, _T("load interface [%s] failed!"), _T("imgdecoder"));
- pRenderFactory->SetImgDecoderFactory(pImgDecoderFactory);
- SApplication *theApp = new SApplication(pRenderFactory, hInstance);
- #ifdef _DEBUG
- //选择了仅在Release版本打包资源则系统资源在DEBUG下始终使用DLL加载
- {
- HMODULE hModSysResource = LoadLibrary(SYS_NAMED_RESOURCE);
- if (hModSysResource)
- {
- CAutoRefPtr<IResProvider> sysResProvider;
- CreateResProvider(RES_PE, (IObjRef**)&sysResProvider);
- sysResProvider->Init((WPARAM)hModSysResource, 0);
- theApp->LoadSystemNamedResource(sysResProvider);
- FreeLibrary(hModSysResource);
- }
- else
- {
- SASSERT(0);
- }
- }
- #else
- //从DLL加载系统资源
- {
- HMODULE hModSysResource = LoadLibrary(SYS_NAMED_RESOURCE);
- if (hModSysResource)
- {
- CAutoRefPtr<IResProvider> sysResProvider;
- CreateResProvider(RES_PE, (IObjRef**)&sysResProvider);
- sysResProvider->Init((WPARAM)hModSysResource, 0);
- theApp->LoadSystemNamedResource(sysResProvider);
- FreeLibrary(hModSysResource);
- }
- else
- {
- SASSERT(0);
- }
- }
- #endif
- CAutoRefPtr<IResProvider> pResProvider;
- #ifdef _DEBUG
- //选择了仅在Release版本打包资源则在DEBUG下始终使用文件加载
- {
- CreateResProvider(RES_FILE, (IObjRef**)&pResProvider);
- bLoaded = pResProvider->Init((LPARAM)_T("uires"), 0);
- SASSERT(bLoaded);
- }
- #else
- {
- CreateResProvider(RES_PE, (IObjRef**)&pResProvider);
- bLoaded = pResProvider->Init((WPARAM)hInstance, 0);
- SASSERT(bLoaded);
- }
- #endif
- theApp->InitXmlNamedID(namedXmlID, ARRAYSIZE(namedXmlID), TRUE);
- theApp->AddResProvider(pResProvider);
- //加载LUA脚本模块。
- #if (defined(DLL_CORE) || defined(LIB_ALL)) && !defined(_WIN64)
- //加载LUA脚本模块,注意,脚本模块只有在SOUI内核是以DLL方式编译时才能使用。
- CAutoRefPtr<SOUI::IScriptFactory> pScriptLuaFactory;
- bLoaded = pComMgr->CreateScrpit_Lua((IObjRef**)&pScriptLuaFactory);
- SASSERT_FMT(bLoaded, _T("load interface [%s] failed!"), _T("scirpt_lua"));
- theApp->SetScriptFactory(pScriptLuaFactory);
- #endif//DLL_CORE
- //加载多语言翻译模块。
- CAutoRefPtr<ITranslatorMgr> trans;
- bLoaded = pComMgr->CreateTranslator((IObjRef**)&trans);
- SASSERT_FMT(bLoaded, _T("load interface [%s] failed!"), _T("translator"));
- if (trans)
- {//加载语言翻译包
- theApp->SetTranslator(trans);
- pugi::xml_document xmlLang;
- if (theApp->LoadXmlDocment(xmlLang, _T("lang_cn"), _T("translator")))
- {
- CAutoRefPtr<ITranslator> langCN;
- trans->CreateTranslator(&langCN);
- langCN->Load(&xmlLang.child(L"language"), 1);//1=LD_XML
- trans->InstallTranslator(langCN);
- }
- }
- theApp->RegisterWindowClass<SShellNotifyIcon>();
- // BLOCK: Run application
- {
- CMainDlg dlgMain;
- dlgMain.Create(GetActiveWindow());
- dlgMain.SendMessage(WM_INITDIALOG);
- dlgMain.CenterWindow(dlgMain.m_hWnd);
- dlgMain.ShowWindow(SW_SHOWNORMAL);
- nRet = theApp->Run(dlgMain.m_hWnd);
- }
- delete theApp;
- }
- delete pComMgr;
- OleUninitialize();
- return nRet;
- }
|