<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      認識soui4js(第5篇):使用擴展控件

      無論內置控件多么豐富,也不可能滿足用戶所有需求??傆袝r候用戶需要自己擴展控件。

      soui4js推薦使用C++來擴展控件,然后通過實現一個js模塊來提供js使用。

      擴展控件通常涉及到圖形上下文的頻繁交互,如果使用js來實現,效率上會大打折扣。使用C++,沒了C++和js的相互調用。使用起來就和C++版本沒有區別了。

      相對于瀏覽器中全部使用js來操作cavas, soui4js提供的這種方案即有C++的高效又有js的靈活。

      如果用戶了解soui中如何擴展控件,就會知道使用C++實現好一個控件后,需要將這個新控件注冊到soui系統中。

      如何開發js擴展模塊參見:認識soui4js(第3篇):使用C/C++開發擴展模塊

      同樣的,由于js的擴展模塊的init,uninit方法獲取不到soui4的IApplication對象,我們需要給這個擴展模塊導出兩個方法到js,示例代碼如下:

      using namespace SOUI;
      void RegisterCtrls(IApplication* pApp) {
          pApp->RegisterObjFactory(&TplSObjectFactory<SProgressRing>());
          pApp->RegisterObjFactory(&TplSObjectFactory<SRatingBar>());
          pApp->RegisterObjFactory(&TplSObjectFactory<SAniWindow>());
          pApp->RegisterObjFactory(&TplSObjectFactory<SChatEdit>());
          pApp->RegisterObjFactory(&TplSObjectFactory<SCheckBox2>());
          pApp->RegisterObjFactory(&TplSObjectFactory<SGroupList>());
          pApp->RegisterObjFactory(&TplSObjectFactory<SHexEdit>());
          pApp->RegisterObjFactory(&TplSObjectFactory<SRoundWnd>());
          pApp->RegisterObjFactory(&TplSObjectFactory<SScrollText>());
          pApp->RegisterObjFactory(&TplSObjectFactory<SPropertyGrid>());
          pApp->RegisterObjFactory(&TplSObjectFactory<SScrollSubtitles>());
          pApp->RegisterObjFactory(&TplSObjectFactory<SVText>());
          pApp->RegisterObjFactory(&TplSObjectFactory<SIECtrl>());
      }
      
      void UnregisterCtrls(IApplication* pApp) {
          pApp->UnregisterObjFactory(&TplSObjectFactory<SProgressRing>());
          pApp->UnregisterObjFactory(&TplSObjectFactory<SRatingBar>());
          pApp->UnregisterObjFactory(&TplSObjectFactory<SAniWindow>());
          pApp->UnregisterObjFactory(&TplSObjectFactory<SChatEdit>());
          pApp->UnregisterObjFactory(&TplSObjectFactory<SCheckBox2>());
          pApp->UnregisterObjFactory(&TplSObjectFactory<SGroupList>());
          pApp->UnregisterObjFactory(&TplSObjectFactory<SHexEdit>());
          pApp->UnregisterObjFactory(&TplSObjectFactory<SRoundWnd>());
          pApp->UnregisterObjFactory(&TplSObjectFactory<SScrollText>());
          pApp->UnregisterObjFactory(&TplSObjectFactory<SPropertyGrid>());
          pApp->UnregisterObjFactory(&TplSObjectFactory<SScrollSubtitles>());
          pApp->UnregisterObjFactory(&TplSObjectFactory<SVText>());
          pApp->UnregisterObjFactory(&TplSObjectFactory<SIECtrl>());
      }
      
      extern "C"
      __declspec(dllexport) JSModuleDef* js_init_module(JSContext* ctx, const char* module_name)
      {
          qjsbind::Context* context = qjsbind::Context::get(ctx);
          qjsbind::Module *module = context->NewModule(module_name);
          module->ExportFunc("RegisterCtrls", RegisterCtrls);
          module->ExportFunc("UnregisterCtrls", UnregisterCtrls);
          Exp_Ctrls(module);
          return module->module();
      }

      上述代碼來自xliveplayer的擴展控件模塊。

      該模塊導出了兩個方法:

      RegisterCtrls,UnregisterCtrls

      這樣,在導入該模塊后,在main函數中調用這兩個方法。就可以在xml中使用這些擴展控件了。

      import * as extctrl from "extctrl.dll";
      
      //...
      
      var g_WordDir;
      function main(inst,workDir,args)
      {
          soui4.log(workDir);
          g_WordDir = workDir;
          let theApp = soui4.GetApp();
          let souiFac = soui4.CreateSouiFactory();
          let trMgr = soui4.CreateTranslatorMgr();
          if(trMgr!=0){
              theApp.SetTranslator(trMgr);
              trMgr.Release();
          }
          let logMgr = soui4.CreateLogMgr();
          if(logMgr != 0){
              theApp.SetLogManager(logMgr);
              logMgr.setLoggerName("xliveplayer");
              logMgr.start();
          }
          let resProvider = souiFac.CreateResProvider(1);
          soui4.InitFileResProvider(resProvider,workDir + "\\uires");
          extctrl.RegisterCtrls(theApp);
          let resMgr = theApp.GetResProviderMgr();
          resMgr.AddResProvider(resProvider,"uidef:xml_init");
          resProvider.Release();
          let hwnd = soui4.GetActiveWindow();
          let hostWnd = new CMainDlg("xml\\dlg_main.xml");
          hostWnd.Create(hwnd,0,0,0,0);
          hostWnd.SendMessage(0x110,0,0);//send init dialog message.
          hostWnd.ShowWindow(1); //1==SW_SHOWNORMAL
          souiFac.Release();
          let ret= theApp.Run(hostWnd.GetHwnd());
          extctrl.UnregisterCtrls(theApp);
          soui4.log("js quit");
          if(logMgr!=0){
              logMgr.stop();
              logMgr.Release();
          }
          return ret;
      }

      完整代碼參見 soui4js-app/xliveplayer: 基于soui4js實現的在線直播視頻播放器 (github.com)

       

      posted @ 2023-07-06 14:52  啟程軟件  閱讀(536)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲av中文乱码一区二| 合川市| 亚洲国产成人精品无色码| 国产精品一区二区三区麻豆| 国产99在线 | 亚洲| 白嫩少妇激情无码| 亚洲成a人无码av波多野| 亚洲一区成人av在线| 国产最新精品系列第三页| caoporn成人免费公开| 本道久久综合无码中文字幕| 亚洲全网成人资源在线观看| 成人永久性免费在线视频| 亚洲精品国产精品国在线| 久久中文字幕一区二区| 亚洲第一福利网站在线观看| 国产亚洲精品VA片在线播放| 久久亚洲中文字幕不卡一二区| 国产91精品一区二区亚洲| 日韩精品成人一区二区三| 亚洲gv猛男gv无码男同| 亚洲精品国产字幕久久麻豆| 国产一区二区在线观看的| 老鸭窝| 精品一卡2卡三卡4卡乱码精品视频| 蜜桃久久精品成人无码av| 成人免费A级毛片无码片2022 | 日韩亚洲精品国产第二页| 台湾佬自拍偷区亚洲综合| 日本道精品一区二区三区| 人人入人人爱| 综合图区亚洲欧美另类图片| 临武县| 亚洲国内精品一区二区| 久久精品国产福利一区二区| 人妻熟女欲求不满在线| 国产精品亚洲五月天高清| 国产精品视频午夜福利| 欧美老熟妇乱子伦牲交视频| 人人爽人人爽人人片a免费| 国产精品久久自在自线不卡|