本例开发环境:WIN10 + VS2015

下载工程

如果还没有编译CEF3库,请见:Windows下用VS2015编译CEF3

创建一个空的 Windows 应用程序,命名为 SimpleBrowser,如下图:

新建 main.cpp ,编写如下代码:

#include "include/cef_app.h"
#include "include/cef_browser.h"
#include "include/cef_client.h"
#include "include/wrapper/cef_closure_task.h"
#include "include/wrapper/cef_helpers.h"
#include <Windows.h>class MyClient : public CefClient, public CefLifeSpanHandler
{// Constructor & Destructor
public:virtual ~MyClient() {}// CefClient methods:
public:virtual CefRefPtr<CefLifeSpanHandler> GetLifeSpanHandler() override{return this;}// CefLifeSpanHandler methods:
public:virtual void OnBeforeClose(CefRefPtr<CefBrowser> browser) override{CefQuitMessageLoop();}private:// Include the default reference counting implementation.IMPLEMENT_REFCOUNTING(MyClient);
};// Implement application-level callbacks for the browser process.
class MyApp : public CefApp, public CefBrowserProcessHandler
{
public:virtual ~MyApp() {}// CefApp methods:virtual CefRefPtr<CefBrowserProcessHandler> GetBrowserProcessHandler() override { return this; }// CefBrowserProcessHandler methods:virtual void OnContextInitialized() override{CEF_REQUIRE_UI_THREAD();// Information used when creating the native window.CefWindowInfo window_info;// SimpleHandler implements browser-level callbacks.CefRefPtr<MyClient> client(new MyClient());// On Windows we need to specify certain flags that will be passed to// CreateWindowEx().window_info.SetAsPopup(NULL, "cefsimple");// Specify CEF browser settings here.CefBrowserSettings browser_settings;// Create the first browser window.CefString url = "http://www.baidu.com";CefBrowserHost::CreateBrowser(window_info, client, url, browser_settings, NULL);}private:// Include the default reference counting implementation.IMPLEMENT_REFCOUNTING(MyApp);
};int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{// Provide CEF with command-line arguments.CefMainArgs main_args(hInstance);// CEF applications have multiple sub-processes (render, plugin, GPU, etc)// that share the same executable. This function checks the command-line and,// if this is a sub-process, executes the appropriate logic.int exit_code = CefExecuteProcess(main_args, NULL, NULL);if (exit_code >= 0){// The sub-process has completed so return here.return exit_code;}// Specify CEF global settings here.CefSettings settings;settings.no_sandbox = true;// SimpleApp implements application-level callbacks for the browser process.// It will create the first browser instance in OnContextInitialized() after// CEF has initialized.auto myApp = CefRefPtr<MyApp>(new MyApp());// Initialize CEF.CefInitialize(main_args, settings, myApp.get(), NULL);// Run the CEF message loop. This will block until CefQuitMessageLoop() is// called.CefRunMessageLoop();// Shut down CEF.CefShutdown();return 0;
}

[工程属性] -> [C/C++] ,将 cef 库的 include 所在目录添加到 [附加包含目录]:

[工程属性] -> [链接器],设置好 [附加库目录] 和 [附加依赖项]:

[工程属性] -> [后期生成事件],在命令行里输入如下内容,将依赖的二进制和资源拷贝过来。另外注意需要将 manifest 清单文件嵌入到最后生成的 exe 中,否则可能无法正常运行。

mt.exe -nologo -manifest "G:\libs\cef\manifest\cef.exe.manifest" "G:\libs\cef\manifest\compatibility.manifest" -outputresource:"$(OutDir)$(TargetFileName)";#1
xcopy G:\libs\cef\lib\Debug\*.dll $(OutDir) /Y /E /F
xcopy G:\libs\cef\lib\Debug\*.bin $(OutDir) /Y /E /F
xcopy G:\libs\cef\Resources\* $(OutDir) /Y /E /F

编译,运行,效果如下:

以上就是用 CEF3 开发的最简单的浏览器。

CEF3:用CEF3实现最简单的浏览器相关推荐

  1. 简单封装浏览器 cookie 工具类

    版权声明:本文首发 http://asing1elife.com ,转载请注明出处. https://blog.csdn.net/asing1elife/article/details/8265571 ...

  2. android 代码浏览,Webview实现android简单的浏览器实例代码

    WebView是Android中一个非常实用的组件,它和Safai.Chrome一样都是基于Webkit网页渲染引擎,可以通过加载HTML数据的方式便捷地展现软件的界面,下面通过本文给大家介绍Webv ...

  3. QT学习:网络应用开发练习(简单网页浏览器)

    前两篇文章编程所使用的QUdpSocket.QTcpSocket和QTcpServer类都是网络传输层上的类,它们封装实现的是底层的网络进程通信(Socket通信)的功能.而Qt网络应用开发则是要在此 ...

  4. 安装meme_新的Meme订单:通过简单的浏览器缓存更改游戏

    安装meme by Philipp 菲利普(Philipp) 新的Meme订单:通过简单的浏览器缓存更改游戏 (The new Meme order: changing the game with s ...

  5. Java swing实现简单的浏览器源码免费分享

    ​此篇给大家分享一下Java swing写的一款简单的浏览器源码,实现了基本的浏览器功能,但是对最新的前端样式和js兼容比较差,用的内核是IE的比较老的,此外引入了eclipse的三个jar包,因为e ...

  6. java免费浏览器,Java swing实现简单的浏览器源码免费分享

    <p> <span style="color:#666666;font-family:"font-size:16px;background-color:#FFFF ...

  7. 通过WebView实现简单的浏览器

    对于WebView组件.虽然在做非浏览器app的时候用到的不多.但还是对这个组件的用法有个基本的了解.下面通过实现一个简单的浏览器的基本功能来熟悉下WebView组件.和它的一些基本使用方法. 布局文 ...

  8. 【Java】 实现一个简单文件浏览器(1)

    学习Java的Swing的时候写的一个超简单文件浏览器 效果如图: 项目结构: 这里面主要用了两个控件,JTree和JTable 下面先说下左侧的文件树如何实现: 首先是FileTree类,继承于JT ...

  9. Python 框架 之 Django 绑定 MySql ,MVT 实现简单一个简单的浏览器(内附详细步骤)

    Python 框架 之 Django 绑定 MySql ,MVT 实现简单一个简单的浏览器(内附详细步骤) 目录

最新文章

  1. 《Spring设计思想》AOP设计思想与原理(图文并茂)
  2. CCF201409-2 画图 java(100分)
  3. LeetCode—220. 存在重复元素 III
  4. IDEA下ANTLR Preview的使用
  5. 事业编前提下,在一个大单位工作好还是在一个小单位工作好?
  6. CV学习笔记-图像滤波器
  7. [渝粤教育] 西南科技大学 管理学原理 在线考试复习资料(4)
  8. MySql重启命令与数据库安装目录
  9. leetcode problem 41 -- First Missing Positive
  10. Atitit db model 数据库快速建模法 开发效率 目录 1. 结构(数据)设计 行为(处理)设计: 1 2. 业务建模阶段 1 2.1. Ui建模法,根据表单字段建立表字段 2 2.2.
  11. 软件安装过程中,系统提示需要安装.Net Framework 3.5解决
  12. python语音信号处理(一)
  13. avmovie_AVMovie1和AVMovie2
  14. 芯片的组成材料是什么?详述芯片分类
  15. 如何在excel中单独冻结多行或多列
  16. 如何使用MacBook更省电,Macbook电池应注意事项
  17. 基于微信小程序的自来水收费系统设计与实现-计算机毕业设计源码+LW文档
  18. UR_RTDE 在Linux安装与使用过程中遇到 一些坑
  19. 关于梦想是计算机的作文英语,关于我的梦想英语作文(精选11篇)
  20. Python 正则表达式学习----flags 编译标志位

热门文章

  1. 显卡mx150和230哪个好_MX150和GTX1050哪个好?MX150与GTX1050性能天梯图对比
  2. x86架构下的安卓虚拟化
  3. 修改时序约束改变slack_改变我们使用Slack的方式解决了我们的透明度和筒仓问题
  4. 移动硬盘出现乱码文件夹的解决方法
  5. 手机扫二维码登录是怎么实现的?
  6. BigDecimal 保留小数位
  7. echarts引入省份地图 失败原因
  8. python内容推荐理由_好书推荐~第5期 | Python 数据可视化
  9. 【DBA100人】李建明:一名普通DBA的14年技术之路与成长智慧
  10. Newman运行集合排错