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