VS2015在MFC中使用Cef3源代码
1.新建一个MFC基础窗口程序
2.把Cef3 SDK里的文件整理出来,并放进自己工程文件夹里,整理出来的效果如图
 
bin->x86->Debug来源于:
F:\cef3\cef_80_windows32\Debug
bin->x86->Release来源于:
F:\cef3\cef_80_windows32\Release
include来源于:
F:\cef3\cef_80_windows32\include
lib->x86->Debug来源于:
F:\cef3\cef_80_windows32\Debug里的lib后缀文件
lib->x86->Release来源于:
F:\cef3\cef_80_windows32\Release里的lib后缀文件
Resources来源于:
F:\cef3\cef_80_windows32\Resources
其他来源于:
F:\cef3\cef_80_windows32\tests\cefsimple
(注:F:\cef3\cef_80_windows32可见另一篇文章中附件下载内容)

3.配置工程属性

xcopy /e /r /y “$(ProjectDir)CEF3\bin\x86\Debug” “$(OutDir)”
xcopy /e /r /y “$(ProjectDir)CEF3\Resources” “$(OutDir)”
xcopy /e /r /y “$(ProjectDir)CEF3\bin\x86\Release” “$(OutDir)”
xcopy /e /r /y “$(ProjectDir)CEF3\Resources” “$(OutDir)”

4.添加文件到工程

5. 学习cefsimple示例工程

(里面每个文件都要认真看一遍,不然后面MFC的示例 你很难看懂原理)
a.文件说明:
        cefsimple_win.cc:Win32主程序的main入口演示
        simple_handler.cc:Chrome浏览器控件的回调函数演示
        simple_handler.h
        simple_app.cc:初始化Chrome浏览器控件演示
        simple_app.h
b.理解Cef3的多进程与单进程之间的关系
        在Debug模式中要使用单进程,只有Release模式中才使用多进程。
        因为CEF3多进程的时候Browser、Rendder等进程是独立分开的,在一些函数上打断点是打不进去的,无法调试!而单进程话就可以正常调试。好,明白了就开始写代码

6.开始写Cef3的初始化代码
(1).在程序入口InitInstance中加上这段代码

(2).在程序入口InitInstance的最部加上这段代码

7.开始写创建Cef3窗口控件的代码
(1).在对话框头部文件中加上这段代码

(2).在窗口的Dlg私有成员变量增加这句代码

(3).在OnInitDialog加上这段代码

(4).修改包含的几个CC文件的相关路径及包含stdafx.h





8.增加 多进程Release与单进程Debug之间的切换代码

需要在simple_app.cc、simple_app.h中添加



成功运行!

注:本程序支持web sql database,local_storage,application_cache,webgl等数据的保存。可以更改以上缓存路径。

难点及疑问解答
Q:为什么cefsimple Win32可以运行,直接复制到MFC中却运行不起来?
A:如果需要在MFC环境中运行,还需要在CEF3初始化的参数加上

CefSettings.multi_threaded_message_loop = true;
否则是运行不起来的!
原因在于Win32中的示例是调用CefRunMessageLoop()来处理CEF3的消息,
而MFC中已经有一个消息循环了,所以告诉CEF3让它自己处理消息循环。
CEF能整合现有的应用程序的消息循环替代自己的消息循环
有两种做法
1.定期调用CefDoMessageLoopWork() 替代调用CefRunMessageLoop()每次调用CefDoMessageLoopWork() 将会执行一次CEF消息循环的迭代,小心使用这种方法。调用这个方法频率太少,将会饿死CEF消息循环并且消极的影响浏览器的性能。调用这种方法太频繁将会消极的影响CPU的使用
2.设置
CefSettings.multi_threaded_message_loop = true(仅限windows下使用),
这将导致CEF运行在浏览器UI线程,该UI线程是从主应用程序分离出来的线程。这种方法既不需要调用CefDoMessageLoopWork() 也不需要调用CefRunMessageLoop() 。
CefInitialize() 和CefShutdown()这两个函数仍然需要在主应用程序调用。你需要提供你自己的机制和主应用程序线程交流。在cefclient_win.cpp查看消息的使用示例.你可以在windows下使用命令行 “–multi-threaded-message-loop”测试cefclient模式。

Q:为什么调用CefShutdown会崩溃?
A:多进程模式下调用CefShutdown就是OK的,app也能够正常析构,而单进程模式调用CefShutdown会直接崩溃!

Q:为什么SimpleHandler这个类没有办法获取CefBrowser句柄?
A:自己增加两个函数就很方便啦


下载说明:
1.本站资源都是白菜价出售,同样的东西,我们不卖几百,也不卖几十,甚至才卖几块钱,一个永久会员能下载全站100%源码了,所以单独购买也好,会员也好均不提供相关技术服务。
2.如果源码下载地址失效请联系站长QQ进行补发。
3.本站所有资源仅用于学习及研究使用,请必须在24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担。资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您权益请联系本站删除!
4.本站站内提供的所有可下载资源(软件等等)本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发);但本网站不能保证资源的准确性、安全性和完整性,由于源码具有复制性,一经售出,概不退换。用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug;同时本站用户必须明白,【安安资源网】对提供下载的软件等不拥有任何权利(本站原创和特约原创作者除外),其版权归该资源的合法拥有者所有。
5.请您认真阅读上述内容,购买即以为着您同意上述内容,由于源码具有复制性,一经售出,概不退换。
安安资源网 » VS2015在MFC中使用Cef3源代码