查看: 64|回复: 0

    [VC++源码]VS2015在MFC中使用Cef3源代码

    [复制链接]

    65

    主题

    65

    帖子

    109

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    109
    发表于 2020-3-20 23:47:50 | 显示全部楼层 |阅读模式

    VS2015在MFC中使用Cef3源代码

    1.新建一个MFC基础窗口程序

    2.把Cef3 SDK里的文件整理出来,并放进自己工程文件夹里,整理出来的效果如图
    01.png 02.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.配置工程属性
    03.png
    04.png
    05.png

    xcopy /e /r /y "$(ProjectDir)CEF3\bin\x86\Debug" "$(OutDir)"

    xcopy /e /r /y "$(ProjectDir)CEF3\Resources" "$(OutDir)"



    06.png
    xcopy /e /r /y "$(ProjectDir)CEF3\bin\x86\Release" "$(OutDir)"

    xcopy /e /r /y "$(ProjectDir)CEF3\Resources" "$(OutDir)"   

    4.添加文件到工程
    07.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中加上这段代码
    08.png
    (2).在程序入口InitInstance的最部加上这段代码

    10.png

    7.开始写创建Cef3窗口控件的代码
    (1).在对话框头部文件中加上这段代码
    09.png
    (2).在窗口的Dlg私有成员变量增加这句代码
    12.png

    (3).在OnInitDialog加上这段代码
    11.png
    (4).修改包含的几个CC文件的相关路径及包含stdafx.h


    13.png
    14.png
    15.png
    16.png

    8.增加 多进程Release与单进程Debug之间的切换代码
    需要在simple_app.cc、simple_app.h中添加

    17.png
    18.png
    19.png

    成功运行!
    20.png
    注:本程序支持web sql database,local_storage,application_cache,webgl等数据的保存。可以更改以上缓存路径。

    21.png



    难点及疑问解答
    Q:为什么cefsimple Win32可以运行,直接复制到MFC中却运行不起来?
    A:如果需要在MFC环境中运行,还需要在CEF3初始化的参数加上
    22.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:自己增加两个函数就很方便啦
    23.png
    24.png




    附件下载:
    VS2015在MFC中使用Cef3源代码.doc (971 KB, 下载次数: 0, 售价: 2 金钱)
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    免责声明:
    1、转载或引用本网站内容须注明原网址,并标明本网站网址“源码资源网”
    2、转载或引用本网站中的署名文章,请按规定向原作者支付稿酬
    3、对于不当转载或引用本网站内容而引起的民事纷争、行政处理或其他损失,本网站不承担责任
    4、对不遵守本声明或其他违法、恶意使用本网站内容者,本网站保留追究其法律责任的权利
    5、资源部分来自网络,不保证资源的完整性,仅供学习研究,如需运营请购买正版,如有侵权请联系客服删除
    6、本站所有资源不带技术支持,下载资源请24小时内删除,如用于违法用途,或者商业用途,一律用于者承担

    QQ|手机版|小黑屋|源码资源网 ( 鲁ICP备19041243号-1 )

    GMT+8, 2020-6-2 22:42

    邮箱:312337667@qq.com 客服QQ:312337667(工作时间:7:00~23:00)

    © Powered by Net188.com X3.4

    快速回复 返回顶部 返回列表