MFC调用cef

1、初始化

m_callBack 是为了将消息返回到主界面的回调类

 1 int CCEFLibrary::InitCef(CCefCallback* callBack)
 2 {
 3     m_callBack = callBack;
 4     CefRefPtr<ClientAppRender> app(new ClientAppRender());
 5     CefSettings settings;
 6     //settings.command_line_args_disabled = TRUE;
 7     settings.no_sandbox = 0;
 8     CefSettingsTraits::init(&settings);
 9     settings.multi_threaded_message_loop = true;
10     settings.remote_debugging_port = 8088;//如果不定义,则不能运行调试工具
11                                           //settings.single_process = true;
12 
13     CefMainArgs mainArgs;
14     CefRefPtr<CefApp> cefApp;
15     cefApp = app;
16 
17     CefInitialize(mainArgs, settings, cefApp, NULL);
18     return 0;
19 }

2、展示页面

函数的index 是为了项目需要额外添加的 索引,一般直接使用else里面的代码内容即可;

 1 int CCEFLibrary::CreateBrowser(int index, RECT rect, HWND hWnd, const std::wstring & url)
 2 {
 3     std::map<int, CefRefPtr<CSimpleClient>>::iterator itr = m_MapSimpleClient.find(index);
 4     if (itr != m_MapSimpleClient.end())
 5     {
 6         itr->second->GetBrowser()->GetMainFrame()->LoadURL(url);
 7         //m_simpleClient->GetBrowser()->GetMainFrame()->LoadURL(cefStrUrl);
 8     }
 9     else
10     {
11         CefRefPtr<CSimpleClient> client(new CSimpleClient());
12         client->SetCallBack(m_callBack);
13         m_MapSimpleClient[index] = client;
14         
15         CefWindowInfo winInfo;
16         winInfo.SetAsChild(hWnd, rect);
17         const CefString cefStrUrl(url);
18         CefBrowserSettings browserSettings;
19         browserSettings.web_security = STATE_DISABLED;
20         CefBrowserHost::CreateBrowser(winInfo, client, cefStrUrl, browserSettings, NULL, NULL);
21 
22         
23     }    
24     return 0;
25 }

3、MFC调用js

test.html

 1 <!DOCTYPE html>
 2 <html>
 3   <!--
 4   Copyright (c) 2016 foruok. All rights reserved.
 5   欢迎关注foruok的微信订阅好“程序视界”。
 6   -->
 7 <head>
 8     <script type="text/javascript">
 9       function Login(){
10         window.NativeLogin(document.getElementById("userName").value, document.getElementById("password").value);
11       }
12       function GetId2(){
13         GetId(2);
14       }
15       function GetId(i)
16       {
17         alert("get id from native by extensions i:" + i);
18         return "i";
19       }
20     </script>
21   <title>CEF JS Integration</title>
22 </head>
23 
24 <body>
25 <h3>Call into native by Window bindings:</h3>
26 <form>
27 UserName: <input type="text" id="userName" />&nbsp;&nbsp;Password: 
28 <input type="text" id="password" />&nbsp;&nbsp;<input  type="button" value="Login" onclick="Login()"/>
29 </form>
30 <hr>
31 <h3>Call into native by js extensions:</h3>
32 <input  type="button" value="GetId2" onclick="GetId2()"/>
33 
34 </html>
View Code

相关文章: