![](https://habrastorage.org/storage2/010/9f9/8b8/0109f98b8b35e5bcab1f0743b248a45f.png)
ããããæ®å¿µãªããšã«ãã©ã€ãã©ãªã«ã¯ããªãæ§ãããªããã¥ã¡ã³ãããããå®éã«ã¯äŸãã³ãã¥ããã£ã¯ãããŸããïŒããã¯C ++ã§ã®éçºã«é©çšãããã¢ãã£ãªãšã€ãã¯ãã幞éã§ãïŒã ããŸããŸãªãœãŒã¹ããå°ããã€åéããå¿ èŠããããŸããããä»ã®äººã¯äžé£ã®è©Šè¡é¯èª€ã®åŸã«ç解ããããã«ãªããŸããã
ãããŠãããã€ãã®ç¥èãèç©ããã®ã§ãããããå ±æããããšã«ããŸããã ç§ã¯ãã®éãè¡ãæåã®äººã§ãæåŸã®äººã§ããªãããšã確信ããŠããŸãã
ç§ã¯ããã«ããªãã«èŠåãããïŒå€åç§ã¯èª€è§£ãŸãã¯èª€è§£ãããããã€ãã®å Žæã§ãããªãã¯å³å¯ã«å€æããã¹ãã§ã¯ãªããæ£ããéãæãã ãã§ãç§ã¯éåžžã«æè¬ããŸãã
çªãšçªã®ãªãAwesomium
ãŸã第äžã«ãAwesomiumã䜿çšããã¢ããªã±ãŒã·ã§ã³ã«ã¯2çš®é¡ãããŸãã
- ãªãã¹ã¯ãªãŒã³ -ãã©ãŠã¶ãŒãŠã£ã³ããŠã衚瀺ããïŒããŒãžäžã®ã¹ã¯ãªããã®ãã¹ãŠã®ã¬ã³ããªã³ã°ãšäœæ¥ã¯ããã¯ã°ã©ãŠã³ãã§è¡ããããŠãŒã¶ãŒã«ã¯è¡šç€ºãããŸããïŒããŸãã¯ãã©ãŠã¶ãŒã®è¡šç€ºãšãšãã«ãããã°ã©ããŒã¯ã¡ãã»ãŒãžã®ã¬ã³ããªã³ã°ãšåŠçã«åŸäºããŸã
- Windowed-Awesomiumã¯ããã€ãã®ãŠã£ã³ããŠã«ããã¿ã€ãããã®äžã«è¡šç€ºãããŸãã ããŠã¹ãšããŒããŒãã®ã¡ãã»ãŒãžã®æç»ãåŠçã¯ã©ã€ãã©ãªã䜿çšããŠå®è¡ãããŸã
1ã€ç®ã¯ããŠã£ã³ããŠã®ãªããã©ãŠã¶ã§äœæ¥ã§ãããšããç¹ã§èå³æ·±ããã®ã§ãã ã³ã³ãœãŒã«ã¢ããªã±ãŒã·ã§ã³ã䜿çšããŠãããšãã°ããŒãžã®ã¹ã¯ãªãŒã³ã·ã§ãããäœæããããšãã§ããŸãã è¯ãäŸããããç§ã¯å®éã«ããã䜿çšããªãã£ãããããã®ã¿ã€ãã«ã€ããŠã¯èª¬æããŸããã 2çªç®ã®ã¢ãŒã-Windowedã«èå³ããããŸããã
Windowed Awesomiumã¯ããŠã£ã³ããŠã¢ããªã±ãŒã·ã§ã³ã§ãã«ãã©ãŠã¶ãå¿ èŠãªå Žåã«äœ¿çšãããŸãã ãã®å Žåãã©ã€ãã©ãªã¯äž»ãªãã®ãã€ãŸããŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ãåŠçããŸãã ããããããã°ã©ã ã«æ°è¡è¿œå ããã ãã§ãã«ãã©ãŠã¶ãåŸããããšã¯æããªãã§ãã ãããããã§ã¯ãããŸããã äœæ¥ã®å€§éšåã¯ããã°ã©ããŒã®è©ã«ãããŸããããšãã°ããã¡ã€ã«ã®ã¢ããããŒã/ã¢ããããŒããã€ã¢ãã°ïŒã¯ããåºæ¬çã«ãã¹ãŠã®ãã€ã¢ãã°ïŒããããã¢ããã¡ãã¥ãŒãããããããŠã³ãªã¹ããæ°ããã¿ãã®äœæãªã©ã§ãã
ã©ã€ãã©ãªãŒæ§é
ã©ã€ãã©ãªã®æ§é ã¯éåžžã«åçŽã§ãïŒãã ããæåã¯ãŸã£ããæããã§ã¯ãããŸããã§ããïŒã
ãã©ãŠã¶ã®ã³ã¢ã¯ã³ã¢ïŒ WebCore ïŒã§ãã åã¢ããªã±ãŒã·ã§ã³ã¯ã³ã¢ã1ã€ã ãæã€ããšãã§ããããã«ããããã€ãã®å¶éã課ããããŸãã ããšãã°ãäžéšã®ã¿ãã§ä»ã®ãŠãŒã¶ãŒãšãŒãžã§ã³ããããã£ã³ã»ã«ãããå ŽåããŠãŒã¶ãŒãšãŒãžã§ã³ãã®å€ã¯ã«ãŒãã«èšå®ã«ä¿åããããããæåããŸããã
éå±€ã®æ¬¡ã¯WebViewã§ããããã¯ãã©ãŠã¶ãŠã£ã³ããŠã§ãã åWebViewãäœæãããšãåå¥ã®Chromiumããã»ã¹ãèµ·åããŸãã WebViewãäžèŠã«ãªã£ãããã¯ãªãŒã³ã¢ããããããšãå¿ããªãã§ãã ãããããããªããšãWebCoreãç Žå£ããããŸã§ããã»ã¹ããã³ã°ããŸãã
åWebViewã¯ã»ãã·ã§ã³ïŒ WebSession ïŒã䜿çšã§ããŸãã ã»ãã·ã§ã³ã¯ãŠãŒã¶ãŒããŒã¿ïŒCookieããã£ãã·ã¥ã蚌ææžãããŒã«ã«ããŒã¿ããŒã¹ãªã©ïŒã§ãã 1ã€ã®WebSessionã¯ç°ãªãWebViewã«æ¥ç¶ã§ããŸãã WebSessionã¯ããããã·ãªã©ã®éèŠãªãã©ãŠã¶èšå®ïŒãã®ã»ãã·ã§ã³ã䜿çšãããã®ïŒãä¿åããŸãã
ããŠãæåŸã®ïŒç§ãäœæ¥ããªããã°ãªããªãã£ãïŒãªã¹ããŒã¯ããã©ãŠã¶ãŒãšå¯Ÿè©±ããããã®ã€ã³ã¿ãŒãã§ãŒã¹ã§ãã ãªã¹ããŒã¯ããã€ãããããããããç¹å®ã®åé¡ã解決ããŸãã ããšãã°ãWebViewListener :: Dialogã«ã¯ãã€ã¢ãã°ããã¯ã¹ãæäœããããã®ã¡ãœããã®å®è£ ãå«ãŸããWebViewListener :: Downloadã«ã¯ãã¡ã€ã«ã®ããŠã³ããŒãã®é²è¡ç¶æ³ãéç¥ããããã®ã¡ãœãããå«ãŸããŸãã
èªç
çè«ã¯çµãããŸãããå®è·µã«ç§»ããŸãããã ãŸããã«ãŒãã«ã¢ãŒããšãã©ãŠã¶ã¿ãããŠã£ã³ããŠã¢ãŒãã§äœæããã³åæåããããã»ã¹ãæ€èšããŸãã
ãŸããã«ãŒãã«ãåæåããå¿ èŠããããŸãã
WebCore* core = 0; WebConfig config; core = WebCore::Initialize(config);
次ã«ãã»ãã·ã§ã³ãäœæããŸãïŒããšãã°ãã»ãã·ã§ã³èšå®ã§ã¯ã䜿çšãããããã·ã䜿çšããŸãïŒ
WebPreferences prefs; prefs.proxy_config = WSLit("198.1.99.26:3128"); WebSession * session = core->CreateWebSession(WSLit(""), prefs);
ãããŠãã¡ãããWebViewãªããžã§ã¯ããäœæããŸãã
WebView* view = core->CreateWebView(WIN_WIDTH, WIN_HEIGHT, session, kWebViewType_Window); view->set_parent_window(hwnd);
æåŸã®ã¹ãããã§ã¯ãããã«è©³ãã説æããŸãã
- ãŸãããã©ãŠã¶ãŠã£ã³ããŠã®åæã®å¹ ãšé«ããæå®ããå¿ èŠãããããšã«æ³šæããŠãã ããã åŸã§å€æŽã§ããŸãïŒããšãã°ã芪ãŠã£ã³ããŠã®ãµã€ãºãå€æŽãããšãïŒ
- 3çªç®ã®ãã©ã¡ãŒã¿ãŒã¯ã»ãã·ã§ã³ã§ãã ã¿ãã®äœæ¥äžã«ã»ãã·ã§ã³ãå€æŽããããšã¯ã§ããŸããããã»ãã·ã§ã³ãžã®ã¢ã¯ã»ã¹ã¯ç¶æããããããçè«çã«ã¯ïŒãã§ãã¯ããŸããã§ããïŒèšå®ãå€æŽã§ããããããæå¹ã«ãªããŸã
- ãã©ãŠã¶ãŒã¿ãäœæã¡ãœããã®æåŸã®ãã©ã¡ãŒã¿ãŒã¯WebViewTypeã§ãã kWebViewType_OffscreenïŒããã©ã«ãïŒãŸãã¯kWebViewType_Windowã®ããããã§ãã okkonyãã©ãŠã¶ãŒãäœæãããšãã«ã2çªç®ãæå®ããŸã
- ã¿ã€ãkWebViewType_Windowã§WebViewãäœæããåŸã®å¿ é æé ã¯ã芪ãŠã£ã³ããŠã®ãã³ãã«ãæå®ããããšã§ãã ãã³ãã«ã¯ãAwesomiumã䜿çšãããŠããããã»ã¹ãšåãããã»ã¹ã®ãŠã£ã³ããŠã§ããå¿ èŠã¯ãããŸãããããšãã°ãDelphiããã°ã©ã ã«ãã³ãã«ããã«ãããããã¹ãŠãæ£åžžã«åäœããŸãã
人ç
Awesomiumã®äœ¿çšç®çã«å¿ããŠããã®ã寿åœãã¯å€§ããç°ãªãå ŽåããããŸãã Windowedã¿ã€ãã®ã¿ãã䜿çšããå Žåã®äž»ãªãã€ã³ãã«ã€ããŠèª¬æããŸãã
第äžã«ãWindowed Awesomiumã¯éšåçã«èªåèªèº«ã®ç掻ãéã£ãŠããŸãããããã§ãå®æçã«åãããšã奚å±ããå¿ èŠããããŸãã ããã·ã¥ã¯ãã«ãŒãã«ã®æŽæ°ã¡ãœããã«ãã£ãŠè¡ãããŸãã 次ã®ããã«ãã¿ã€ããŒã§åŒã³åºãããšããå§ãããŸãã
// Create our WebCore Update timer, renders at a max of 66 FPS UINT myTimer = SetTimer ( hwnd, 0, 15, NULL ); ... case WM_TIMER: { if (core) { core->Update(); } } ...
ãŸããWebViewã®ç Žå£åŸã«ã«ãŒãã«ã®æŽæ°ãè¡ãããšããå§ãããŸãã
次ã«ããã©ãŠã¶ãŠã£ã³ããŠã芪ãŠã£ã³ããŠãšãšãã«ãµã€ãºå€æŽããå Žåã芪ãŠã£ã³ããŠã®WM_SIZEã¡ãã»ãŒãžãåŠçãããã©ãŠã¶ã«æ°ãããµã€ãºãå ±åããå¿ èŠããããŸãã ããã¯éåžžã«ç°¡åã«è¡ãããŸãïŒ
case WM_SIZE: { if (view) { int nWidth = LOWORD(lParam); // int nHeight = HIWORD(lParam); // view->Resize(nWidth, nHeight); } }
ãããŠç¬¬äžã«ããã©ãŠã¶ãå®å šã«æ©èœããããã«ã¯ããªã¹ããŒã€ã³ã¿ãŒãã§ã€ã¹ãå®è£ ããããããåWebViewã«æ¥ç¶ããå¿ èŠããããŸãã ã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£ ã«åé¡ã¯ãªãã¯ãã§ãããããã¯ååã«ææžåãããŠããŸãã å¿ èŠãªãã³ãã¯ãã¹ãŠã WebViewListener.hãã¡ã€ã«ã«ãããŸãã ãŸããããããæ¥ç¶ããããšã¯ãŸã£ããé£ãããããŸããïŒ
DialogListener * dialog_lis = new DialogListener(); view->set_dialog_listener(dialog_lis);
åã«ãèšã£ãããã«ããŠã£ã³ããŠã¢ãŒãã§äœæ¥ããå Žåãã©ã€ãã©ãªã¯ããã«ã€ããŠå€ãã®ããšãå¿é ããŸãã芪ãŠã£ã³ããŠã§ã®èªã¿èŸŒãŸããããŒãžã®ã¬ã³ããªã³ã°ãããŒããŒããšããŠã¹ã®ããŒã¹ãããŒã¯ã®åŠçãããŠã¹ã«ãŒãœã«ã®å€æŽãªã©ã
ããŠããã®ç« ã®æåŸã«ãããŒãžãéããŠããŒãããã®ãåŸ ã€å°ããªäŸã瀺ããŸãã
// view->LoadURL(WebURL(WSLit("http://google.com/"))); // while(view->IsLoading()) { Sleep(50); core->Update(); } // ( ) view->Focus();
æ»
ä»äºã®åŸã®æž æã§ã¯ãæ倧ã®åé¡ãçºçããŸããã Windowedã¢ãŒãã§äœæ¥ããããã®å ¬åŒããã¥ã¡ã³ãããã³Googleã®ãã®äž»é¡ã«é¢ããæ å ±ã¯ããŒãããããããã«å€ããªã£ãŠããŸãã è©Šè¡é¯èª€ã«ãã£ãŠãç§ã¯æ¬¡ã®ããšã«æ°ä»ããŸããã
1. WebViewãç Žæ£ããåã«-æåã«èŠªãŠã£ã³ããŠãç Žæ£ããå¿ èŠããããŸãïŒéã®é åºã¯ã¢ããªã±ãŒã·ã§ã³ã®ã¯ã©ãã·ã¥ã«ã€ãªãããŸãïŒã
2.ã»ãã·ã§ã³ããŒã¿ãä¿åããå ŽåïŒã¡ã¢ãªå ã»ãã·ã§ã³ã§ã¯ãªãå ŽåïŒãã»ãã·ã§ã³ã€ã³ã¹ã¿ã³ã¹ã§Releaseã¡ãœãããåŒã³åºãå¿ èŠããããŸãã
3. Destroyã¡ãœãããåŒã³åºããšWebViewãç Žæ£ãããŸãïŒä»ã«ã¯äœããããŸããïŒ
4. Shutdownã¡ãœãããåŒã³åºããšãã«ãŒãã«ãç Žæ£ãããŸãããã®ã¡ãœããã¯ã誀ã£ãŠç Žæ£ãããWebViewãã¯ãªãŒã³ã¢ããããããšãã§ããŸãïŒãã ãããã®ããã»ã¹èªäœãå¶åŸ¡ããããšããå§ãããŸãïŒ
倧äœã次ã®ããã«ãªããŸãã
// - ... // ( , , ) view->Stop(); // view->session()->Release(); // WebView ( Chromium ) view->Destroy(); // ( , ) core->Update(); // core->Shutdown();
ã«ãŒãã«ã®ç Žæ£ã¯ãããã°ã©ã ãçµäºããåã«ã®ã¿å¿ èŠã§ãã 1ã€ã®ãã©ãŠã¶ã¿ããéããå¿ èŠãããå Žåã¯ããã®ã¿ããšãã®ã¿ãã«ãã£ãWebViewãåé€ããã ãã§ãã
䟿å©ãªãªã³ã¯
AwesomiumãåŠç¿ããéã \ Awesomium SDK \ 1.7.1.0 \ include \ Awesomium \ãã©ã«ããŒãšä»¥äžã®ã€ã³ã¿ãŒãããããŒãžã«ããããããŒãã¡ã€ã«ã®ã³ã¡ã³ãã¯ãéåžžã«åœ¹ç«ã¡ãŸããã
-wiki.awesomium.com/general-use-Awesomiumã®äœæè ã«ãããããããªãŠãŒã¹ã±ãŒã¹ã ãã®ã©ã€ãã©ãªã䜿çšããŠãããžã§ã¯ããäœæããæ¹æ³ãšãã¢ããªã±ãŒã·ã§ã³ãæ©èœããããã«å¿ èŠãªãã¡ã€ã«ã®èª¬æããããŸãã
-awesomium.com/docs/1_7_0/cpp_api/index.html#intro_sec-å ¬åŒããã¥ã¡ã³ãïŒå«ãŸããŠããããããŒãã¡ã€ã«ã®ã³ã¡ã³ããæ¬è³ªçã«è€è£œïŒ
-gist.github.com/khrona-githubã§ã®ãŠãŒã¶ãŒkhronaã®éçºã 圌ã¯æåã®ãã¹ãã¢ããªã±ãŒã·ã§ã³ãç¹ã«GDI / WinForms / WinAPIã§Awesomium r148 APIã䜿çšãããã®äŸã®äœæã«å€§ãã«åœ¹ç«ã¡ãŸããã 確ãã«ã圌ã¯ãªãã¹ã¯ãªãŒã³ã¢ãŒãã§ãŠã£ã³ããŠã¢ãŒãã®ããã«èŠããããšããŠããŸãããã®çç±ã¯ãæ©èœããããã§ããããã§ãïŒããšãã°ããªã³ã¯ã®äžã«ããŠã¹ã移åããŠãã¹ã¯ããŒã«ãæ©èœãããããŠã¹ã«ãŒãœã«ãå€åããŸããïŒã
-answer.awesomium.com/index.html-ãŠãŒã¶ãŒã®è³ªåãžã®åçã æ®å¿µãªããããã¹ãŠã®è³ªåã«çããåŸãããããã§ã¯ãªããããããã«ã¯ããŸãæçšãªæ å ±ã¯ãããŸãããã