| VS2015在MFC中使用Cef3源代码 
 1.新建一个MFC基础窗口程序 
 2.把Cef3 SDK里的文件整理出来,并放进自己工程文件夹里,整理出来的效果如图 
[VC++源码]VS2015在MFC中使用Cef3源代码 ![[VC++源码]VS2015在MFC中使用Cef3源代码 [VC++源码]VS2015在MFC中使用Cef3源代码](./data/attachment/forum/202003/20/233825voh2255fl75535lg.png)  [VC++源码]VS2015在MFC中使用Cef3源代码 ![[VC++源码]VS2015在MFC中使用Cef3源代码 [VC++源码]VS2015在MFC中使用Cef3源代码](./data/attachment/forum/202003/20/233825ir3y5hryx8y3o5am.png)  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.配置工程属性
 
 
[VC++源码]VS2015在MFC中使用Cef3源代码 ![[VC++源码]VS2015在MFC中使用Cef3源代码 [VC++源码]VS2015在MFC中使用Cef3源代码](./data/attachment/forum/202003/20/233826uzmqleu4le3lqlqd.png)   
[VC++源码]VS2015在MFC中使用Cef3源代码 ![[VC++源码]VS2015在MFC中使用Cef3源代码 [VC++源码]VS2015在MFC中使用Cef3源代码](./data/attachment/forum/202003/20/233826hmpwpyz4xxajm41a.png)   
[VC++源码]VS2015在MFC中使用Cef3源代码 ![[VC++源码]VS2015在MFC中使用Cef3源代码 [VC++源码]VS2015在MFC中使用Cef3源代码](./data/attachment/forum/202003/20/233826qo91ukby8b5n91vb.png)  
 xcopy /e /r /y "$(ProjectDir)CEF3\bin\x86\Debug" "$(OutDir)" 
 xcopy /e /r /y "$(ProjectDir)CEF3\Resources" "$(OutDir)" 
 
 
 
[VC++源码]VS2015在MFC中使用Cef3源代码 ![[VC++源码]VS2015在MFC中使用Cef3源代码 [VC++源码]VS2015在MFC中使用Cef3源代码](./data/attachment/forum/202003/20/233827izxzueanxxnm51z5.png)   xcopy /e /r /y "$(ProjectDir)CEF3\bin\x86\Release" "$(OutDir)" 
 xcopy /e /r /y "$(ProjectDir)CEF3\Resources" "$(OutDir)"    4.添加文件到工程
 
 [VC++源码]VS2015在MFC中使用Cef3源代码 ![[VC++源码]VS2015在MFC中使用Cef3源代码 [VC++源码]VS2015在MFC中使用Cef3源代码](./data/attachment/forum/202003/20/233827zqiigekmohdg8jz4.png)  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中加上这段代码
 
 [VC++源码]VS2015在MFC中使用Cef3源代码 ![[VC++源码]VS2015在MFC中使用Cef3源代码 [VC++源码]VS2015在MFC中使用Cef3源代码](./data/attachment/forum/202003/20/233828k3dsf8l63jl6u23m.png)  (2).在程序入口InitInstance的最底部加上这段代码
 
 
 [VC++源码]VS2015在MFC中使用Cef3源代码 ![[VC++源码]VS2015在MFC中使用Cef3源代码 [VC++源码]VS2015在MFC中使用Cef3源代码](./data/attachment/forum/202003/20/233829j3yysys1wwdbwwet.png)  
 7.开始写创建Cef3窗口控件的代码
 (1).在对话框头部文件中加上这段代码
 
 [VC++源码]VS2015在MFC中使用Cef3源代码 ![[VC++源码]VS2015在MFC中使用Cef3源代码 [VC++源码]VS2015在MFC中使用Cef3源代码](./data/attachment/forum/202003/20/233828i46miyi6rzoco7wx.png)  (2).在窗口的Dlg私有成员变量增加这句代码
 
 [VC++源码]VS2015在MFC中使用Cef3源代码 ![[VC++源码]VS2015在MFC中使用Cef3源代码 [VC++源码]VS2015在MFC中使用Cef3源代码](./data/attachment/forum/202003/20/233830t5768sngs27s1rer.png)  
 (3).在OnInitDialog加上这段代码
 
 [VC++源码]VS2015在MFC中使用Cef3源代码 ![[VC++源码]VS2015在MFC中使用Cef3源代码 [VC++源码]VS2015在MFC中使用Cef3源代码](./data/attachment/forum/202003/20/233829qpqtkmgsap6qlqql.png)  (4).修改包含的几个CC文件的相关路径及包含stdafx.h
 
 
 
 [VC++源码]VS2015在MFC中使用Cef3源代码 ![[VC++源码]VS2015在MFC中使用Cef3源代码 [VC++源码]VS2015在MFC中使用Cef3源代码](./data/attachment/forum/202003/20/233830bh8nyzz6z98ybbwn.png)  
 [VC++源码]VS2015在MFC中使用Cef3源代码 ![[VC++源码]VS2015在MFC中使用Cef3源代码 [VC++源码]VS2015在MFC中使用Cef3源代码](./data/attachment/forum/202003/20/233830q7j2der2frm02me5.png)  
 [VC++源码]VS2015在MFC中使用Cef3源代码 ![[VC++源码]VS2015在MFC中使用Cef3源代码 [VC++源码]VS2015在MFC中使用Cef3源代码](./data/attachment/forum/202003/20/233831juzlb99394nscsda.png)  
 [VC++源码]VS2015在MFC中使用Cef3源代码 ![[VC++源码]VS2015在MFC中使用Cef3源代码 [VC++源码]VS2015在MFC中使用Cef3源代码](./data/attachment/forum/202003/20/233831dopjtg4zpp3mg23y.png)  
 8.增加 多进程Release与单进程Debug之间的切换代码
 
  需要在simple_app.cc、simple_app.h中添加 
 [VC++源码]VS2015在MFC中使用Cef3源代码 ![[VC++源码]VS2015在MFC中使用Cef3源代码 [VC++源码]VS2015在MFC中使用Cef3源代码](./data/attachment/forum/202003/20/233831nzxh9d12dh3f2cf2.png)  
 [VC++源码]VS2015在MFC中使用Cef3源代码 ![[VC++源码]VS2015在MFC中使用Cef3源代码 [VC++源码]VS2015在MFC中使用Cef3源代码](./data/attachment/forum/202003/20/233831h64w6pvpczpupg4n.png)  
 [VC++源码]VS2015在MFC中使用Cef3源代码 ![[VC++源码]VS2015在MFC中使用Cef3源代码 [VC++源码]VS2015在MFC中使用Cef3源代码](./data/attachment/forum/202003/20/233832duuc5cr30xzt3y3y.png)  
 成功运行!
 
 [VC++源码]VS2015在MFC中使用Cef3源代码 ![[VC++源码]VS2015在MFC中使用Cef3源代码 [VC++源码]VS2015在MFC中使用Cef3源代码](./data/attachment/forum/202003/20/233832e3o32hz7oh7ko2bn.png)  注:本程序支持web sql database,local_storage,application_cache,webgl等数据的保存。可以更改以上缓存路径。
 
 
 [VC++源码]VS2015在MFC中使用Cef3源代码 ![[VC++源码]VS2015在MFC中使用Cef3源代码 [VC++源码]VS2015在MFC中使用Cef3源代码](./data/attachment/forum/202003/20/233833exjexxt22i2327er.png)  
 
 难点及疑问解答
 Q:为什么cefsimple Win32可以运行,直接复制到MFC中却运行不起来?
 A:如果需要在MFC环境中运行,还需要在CEF3初始化的参数加上
 
 [VC++源码]VS2015在MFC中使用Cef3源代码 ![[VC++源码]VS2015在MFC中使用Cef3源代码 [VC++源码]VS2015在MFC中使用Cef3源代码](./data/attachment/forum/202003/20/233833azs5usgghs2dhgsi.png)  
 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:自己增加两个函数就很方便啦
 
 [VC++源码]VS2015在MFC中使用Cef3源代码 ![[VC++源码]VS2015在MFC中使用Cef3源代码 [VC++源码]VS2015在MFC中使用Cef3源代码](./data/attachment/forum/202003/20/233833xna4qvkxsrqvewkq.png)  
 [VC++源码]VS2015在MFC中使用Cef3源代码 ![[VC++源码]VS2015在MFC中使用Cef3源代码 [VC++源码]VS2015在MFC中使用Cef3源代码](./data/attachment/forum/202003/20/233834ogtpgfdgpdbpzndd.png)  
 
 链接:https://pan.baidu.com/s/1gaqTGCPv3ypyrqsmO2IBmw
 
 附件下载:
 
 
 
 
 
 
 提示:
 CEF3源码编译,可以参考 VS2015编译CEF3源代码(64位操作系统下)
 
 
 
 
 
 
 
 
 |