Chromium Embedded Framework
关于CEF
下载CEF
将CEF嵌入到单文档程序中
- 给CEFBrowser工程添加一个空白的头文件:ExampleCefApp.h,文件中加入如下代码:
- #pragma once
- #include "include/cef_app.h"
- class ExampleCefApp : public CefApp
- {
- public:
- ExampleCefApp ()
- {
- }
- virtual ~ExampleCefApp ()
- {
- }
- private:
- IMPLEMENT_REFCOUNTING (ExampleCefApp);
- };
- 在给CEFBrowser工程添加一个空白的头文件:ExampleCefHandler.h,文件中加入如下代码:
- #pragma once
- #include "include/cef_client.h"
- class ExampleCefHandler : public CefClient,
- public CefContextMenuHandler,
- public CefDisplayHandler,
- public CefDownloadHandler,
- public CefDragHandler,
- public CefGeolocationHandler,
- public CefKeyboardHandler,
- public CefLifeSpanHandler,
- public CefLoadHandler,
- public CefRequestHandler
- {
- public:
- ExampleCefHandler();
- virtual ~ExampleCefHandler();
- CefRefPtr<CefBrowser> GetBrowser();
- #pragma region CefClient
- // since we are letting the base implementations handle all of the heavy lifting,
- // these functions just return the this pointer
- virtual CefRefPtr<CefContextMenuHandler> GetContextMenuHandler () OVERRIDE;
- virtual CefRefPtr<CefDisplayHandler> GetDisplayHandler () OVERRIDE;
- virtual CefRefPtr<CefDownloadHandler> GetDownloadHandler () OVERRIDE;
- virtual CefRefPtr<CefDragHandler> GetDragHandler () OVERRIDE;
- virtual CefRefPtr<CefGeolocationHandler> GetGeolocationHandler () OVERRIDE;
- virtual CefRefPtr<CefKeyboardHandler> GetKeyboardHandler () OVERRIDE;
- virtual CefRefPtr<CefLifeSpanHandler> GetLifeSpanHandler () OVERRIDE;
- virtual CefRefPtr<CefLoadHandler> GetLoadHandler () OVERRIDE;
- virtual CefRefPtr<CefRequestHandler> GetRequestHandler () OVERRIDE;
- #pragma endregion // CefClient
- #pragma region CefDownloadHandler
- // this function is virtual and must be implemented; we do nothing in it, so downloading files won't work as the callback function isn't invoked
- virtual void OnBeforeDownload (CefRefPtr<CefBrowser> browser, CefRefPtr<CefDownloadItem> download_item, const CefString& suggested_name, CefRefPtr<CefBeforeDownloadCallback> callback);
- #pragma endregion // CefDownloadHandler
- #pragma region CefLifeSpanHandler
- // cache a reference to the browser
- virtual void OnAfterCreated (CefRefPtr<CefBrowser> browser) OVERRIDE;
- // release the browser reference
- virtual void OnBeforeClose (CefRefPtr<CefBrowser> browser) OVERRIDE;
- #pragma endregion // CefLifeSpanHandler
- protected:
- // the browser reference
- CefRefPtr<CefBrowser> browser;
- // Include the default reference counting implementation.
- IMPLEMENT_REFCOUNTING (ExampleCefHandler);
- // Include the default locking implementation.
- IMPLEMENT_LOCKING (ExampleCefHandler);
- };
- 然后给CEFBrowser工程添加一个空白的源文件:ExampleCefHandler.cpp,加入代码如下:
- #include "stdafx.h"
- #include "ExampleCefHandler.h"
- ExampleCefHandler::ExampleCefHandler ()
- {
- }
- ExampleCefHandler::~ExampleCefHandler ()
- {
- }
- CefRefPtr<CefBrowser> ExampleCefHandler::GetBrowser ()
- {
- return browser;
- }
- CefRefPtr<CefContextMenuHandler> ExampleCefHandler::GetContextMenuHandler ()
- {
- return this;
- }
- CefRefPtr<CefDisplayHandler> ExampleCefHandler::GetDisplayHandler ()
- {
- return this;
- }
- CefRefPtr<CefDownloadHandler> ExampleCefHandler::GetDownloadHandler ()
- {
- return this;
- }
- CefRefPtr<CefDragHandler> ExampleCefHandler::GetDragHandler ()
- {
- return this;
- }
- CefRefPtr<CefGeolocationHandler> ExampleCefHandler::GetGeolocationHandler ()
- {
- return this;
- }
- CefRefPtr<CefKeyboardHandler> ExampleCefHandler::GetKeyboardHandler ()
- {
- return this;
- }
- CefRefPtr<CefLifeSpanHandler> ExampleCefHandler::GetLifeSpanHandler ()
- {
- return this;
- }
- CefRefPtr<CefLoadHandler> ExampleCefHandler::GetLoadHandler ()
- {
- return this;
- }
- CefRefPtr<CefRequestHandler> ExampleCefHandler::GetRequestHandler ()
- {
- return this;
- }
- void ExampleCefHandler::OnBeforeDownload (CefRefPtr<CefBrowser> browser,
- CefRefPtr<CefDownloadItem> download_item,
- const CefString& suggested_name, CefRefPtr<CefBeforeDownloadCallback> callback)
- {
- UNREFERENCED_PARAMETER (browser);
- UNREFERENCED_PARAMETER (download_item);
- callback->Continue (suggested_name, true);
- }
- void ExampleCefHandler::OnAfterCreated(CefRefPtr<CefBrowser> browser)
- {
- CefLifeSpanHandler::OnAfterCreated (browser);
- }
- void ExampleCefHandler::OnBeforeClose(CefRefPtr<CefBrowser> browser)
- {
- CefLifeSpanHandler::OnBeforeClose (browser);
- }
- 切换到“类视图”,右键点击CCEFBrowserView-》属性,在属性对话框中给类CCEFBrowserView添加WM_CREATE的响应函数OnCreate。在CEFBrowserView.cpp文件开头处加入如下代码:
- #include "ExampleCefApp.h"
- #include "ExampleCefHandler.h"
- #define INVALID_HWND (HWND)INVALID_HANDLE_VALUE
- namespace
- {
- CefRefPtr<ExampleCefHandler> example_cef_handler;
- HWND application_message_window_handle = INVALID_HWND;
- }
OnCreate函数的代码如下:
- int CCEFBrowserView::OnCreate(LPCREATESTRUCT lpCreateStruct)
- {
- if (CView::OnCreate(lpCreateStruct) == -1)
- return -1;
- // TODO: 在此添加您专用的创建代码
- CefMainArgs main_args ( AfxGetApp()->m_hInstance );
- CefRefPtr<ExampleCefApp> app (new ExampleCefApp);
- if (CefExecuteProcess(main_args, app.get()) == -1)
- {
- CefSettings settings;
- CefSettingsTraits::init( &settings);
- settings.multi_threaded_message_loop = true;
- CefInitialize (main_args, settings, app.get());
- example_cef_handler = new ExampleCefHandler();
- CefWindowInfo info;
- info.SetAsChild(m_hWnd, CRect(0, 0, 1200, 1200));
- CefBrowserSettings settings1;
- CefBrowserHost::CreateBrowser(info, example_cef_handler.get(), CefString ("http://www.sina.com"), setting1, NULL);
- }
- return 0;
- }
至此,所添加的代码完毕,好了现在编译工程CEFBrowser,在Debug目录
(我的路径是D:\cef_binary_3.1650.1562_windows32\Debug)中确认生成了CEFBrowser.exe,
同时编译器自动的将需要的一些CEF文件也拷贝到了此文件夹下。此时还不能成功运行CEFBrowser.exe
显示出页面,需要将上面我们编译cefclient项目产生的locales文件夹和cef.pak文件
(D:\cef_binary_3.1650.1562_windows32\out\Debug目录中)拷贝到Debug目录下
(提示是否替换,选择是),好了现在可以运行CEFBrowser.exe显示出新浪的页面了(结果如下图)。
Chromium Embedded Framework的更多相关文章
- Chromium Embedded Framework 中文文档(简介)
转自:http://www.cnblogs.com/think/archive/2011/10/06/CEF-Introduce.html 简介 Chromium Embedded Framework ...
- 利用 Chromium Embedded Framework (CEF) 定制提取 Flash 视频的浏览器
功能介绍: 利用 CEF 分析网页源码, 提取 flash 视频的代码. 提取的视频代码 LoadString 和 JS 两种方式重新插入到浏览器. (CEF_3.2171.1979_win32 - ...
- Chromium Embedded Framework (CEF)_3.2171.2069_v20170606_x86.tar.xz
CEF 为观看各个直播平台而特此修改的浏览器 可以单独提取 Flash 视频, 并可以修改视频的大小等功能 [增加了960x90% 和 1280x90%] 这次修改是主要针对 YY web 直播平台 ...
- Chromium Embedded Framework (CEF)_3.2171.1979_v20170602_x86.tar.xz
CEF 为观看各个直播平台而特此修改的浏览器 可以单独提取 Flash 视频, 并可以修改视频的大小等功能 这次修改是主要针对 YY web 直播平台 对录屏的朋友有很大帮组 CEF_3.2171.1 ...
- Create an Embedded Framework in Xcode with Swift
转自:http://zappdesigntemplates.com/create-an-embedded-framework-in-xcode-with-swift/ Post Series: Cre ...
- 如何在Windows上从源码编译Chromium (CEF3) 加入mp3支持
一.什么是CEF CEF即Chromium Embeded Framework,由谷歌的开源浏览器项目Chromium扩展而来,可方便地嵌入其它程序中以得到浏览器功能. CEF包括CEF1和CEF3两 ...
- 构建基于Chromium的应用程序
chromium是google chrome浏览器所采用的内核,最开始由苹果的webkit发展而出,由于webkit在发展上存在分歧,而google希望在开发上有更大的自由度,2013年google决 ...
- 构建基于Chromium的应用程序(Winform程序加载Html页面)
chromium是google chrome浏览器所采用的内核,最开始由苹果的webkit发展而出,由于webkit在发展上存在分歧,而google希望在开发上有更大的自由度,2013年google决 ...
- Winform下CefSharp的引用、配置、实例与报错排除(源码)
Winform下CefSharp的引用.配置.实例与报错排除 本文详细介绍了CefSharp在vs2013..net4.0环境下,创建Winfrom项目.引用CefSharp的方法,演示了winfro ...
随机推荐
- zip (ICSharpCode.SharpZipLib.dll文件需要下载)
ZipClass zc=new ZipClass (); zc.ZipDir(@"E:\1\新建文件夹", @"E:\1\新建文件夹.zip", 1);//压缩 ...
- 关于下载文件封装的两个类(Mars)
首先是文件FileUtils.java package mars.utils; import java.io.File; import java.io.FileOutputStream; import ...
- 学JS的书籍
1.JavaScript DOM 编程艺术 [说明] 这本书最大的特点就是简明易懂,循序渐进,适合初学者,非常容易上手. 计划:三天读完 读书总结:待写 2.Javascript权威指南 特点是权威. ...
- iOS - runtime 常用方法举例说明
使用的自定义类,如下: #import <Foundation/Foundation.h> @interface Person : NSObject @property(nonatomic ...
- cocos的Director、Scence、Layer(一)---摘自于官方文档
基本结构图(重要) Director: 有那些作用? OpenGL ES的初始化,场景的转换,游戏暂停继续的控制,世界坐标和GL坐标之间的切换,对节点(游戏元素)的控制,游戏数据的保存调用,屏幕尺寸的 ...
- ArcSDE 10.1 For Windows 创建空间数据库与常见错误_SQL Server
本文是2013年时候参加ESRI竞赛,创建ArcSDE 10.1 for SQL Server时候出问题了,因此写了该文档. 由于一直忙于学习,忘了发布.今天一师弟也遇到同样问题,为此我觉得可能有不少 ...
- 一键部署基于SVN开源版本控制系统
https://market.azure.cn/Vhd/Show?vhdId=11889&version=12961 产品详情 产品介绍Subversion作为新一代的开源版本控制工具,Sub ...
- UVA12906 Maximum Score (组合)
对于每个元素,最理想的情况就是都在它的左边或者右边,那么sort一下就可以得到一个特解了,然后大的中间不能有小的元素,因为如果有的话,那么无论选小的还是选大的都不是最优.对小的元素来说,比它大的元素在 ...
- 跑yscacaca/HHAR-Data-Process出现的问题
直接按照说明跑: python dataAli-sameUserDevice.py python pairDataFile.py python sep_HHAR_data.py 但在sep_HHAR_ ...
- 交叉熵cross entropy和相对熵(kl散度)
交叉熵可在神经网络(机器学习)中作为损失函数,p表示真实标记的分布,q则为训练后的模型的预测标记分布,交叉熵损失函数可以衡量真实分布p与当前训练得到的概率分布q有多么大的差异. 相对熵(relativ ...