cefrun

时间:2024-07-05 13:58:55编辑:小早

微压锅哪个牌子的好

微压锅好牌子有九阳,美的,宇爵,阿里达达,苏泊尔。1、九阳全球知名豆浆品牌,中国知名厨房电器品牌,也是豆浆机行业的领跑者,主营包括电饭煲、榨汁机、料理机、面条机等产品。2、美的美的集团创立于1968年,是一家以家电制造业为主的大型综合性企业集团。3、宇爵宇爵主要销售的产品有多功能电煮锅,学生泡面锅电蒸锅等。4、阿里达达阿里达达厨具品牌,旗下主营烤炉,电炒锅,不粘锅等产品。5、苏泊尔知名家用电器品牌,是中国最大、全球第二的炊具研发制造商,中国厨房小家电领先品牌,是中国炊具行业首家上市公司,拥有明火炊具、厨房小家电、厨卫电器三大事业领域,丰富的产品线,全面满足厨房生活需求。

提前学习外语的优缺点

在网上搜了一下,觉得有以下两篇说得比较好,供你参考。

1.
学外语越早越好吗

婴幼儿记忆力好,模仿力强,而且大胆,敢说,不怕说错,所以这一时期是学习外语的最好时机。

究竟孩子几岁学外语比较好,学术界还没有定论。目前,在欧洲发达国家,一般是让孩子从10岁开始学外语,我国有些城市是让孩子从小学3年级开始学外语。如果某些孩子确实有语言天赋,又有内动力,当然早学也未尝不可,但一定要注意语言的规范性。

外语,孩子可以学也应该学,但不能一哄而上,赶时髦,也并非越早越好。孩子学外语还有一个内动力问题,如果孩子性格较内向,不愿多说话,对学外语毫无兴趣,那就千万不能勉强他。有的家长送孩子去读外语,自己花时间陪孩子,可孩子却在教室里开小差,做小动作,根本没有学进去。

对于孩子来讲,首先要学好的是母语,如母语学不好,孩子就无法很好地与别人交流。母语随时随地都可以学,而学外语是需要有语言环境的。对于孩子来说,学习母语是在一个自然环境里,而学习外语则是在一个人为的环境里.离开这个环境孩子就不再有机会接触外语了。而语言是在使用中学会的,光学不用,事倍功半,时间长了等于白学,这是很可惜的。


2.
只要方法得当,孩子越早学外语效果越好

要从娃娃抓起

德国著名儿童女教育学家沙凡认为,孩子最好从2周岁开始学外语,最迟不得晚于青春发育期。科学研究表明,两三岁时儿童舌头肌肉尚未成熟定型,是儿童语言发展的重要时期,在语音辨别、语音模仿、词汇吸收等方面具有成年人无法比拟的优势,更便于说出地道标准的外语。

英国伦敦大学学院的科学家最近一项研究也印证:儿童学语言的能力要比成年人强,而且一个人学外语的年龄越早,他对这门外语越容易掌握。在德国经商的王光启先生证实了这一点:“我大女儿9岁来德国,给她请了家教,又上语言班,但她学起来还是很费力。而我的小女儿学起德语就轻松多了。她来德国时刚满3岁,进幼儿园后也没有刻意管她,但她的德语水平却是我们家最高的。”

早学外语不是拔苗助长

有的家长担心对幼儿过早增加外语教育,会给孩子造成过重的负担,从而导致负面效应。对此,国内外教育家都有一致的见解:只要方法得当,越早学外语效果会越好。沙凡说,从小学外语会提升综合语言能力。来德国3年的访问学者董天祺说:“我的孩子现在德国上中学,他不仅学德语,还学法语。原本我担心会影响孩子对其他学科的学习,可后来我发现这种担心是多余的。”

如何教儿童外语

首先,想方设法培养儿童学习外语的兴趣。教学实践证明,学习者如果对所学语言有好感,语言学习更易成功。德国教育家施罗德认为,通过娱乐的方式让儿童不知不觉中学外语,可以达到事半功倍的效果。如和孩子一起做游戏、学唱歌、画画等来激发他们的兴趣,使儿童觉得学外语很好玩。

其次,为儿童学外语创造语言环境。德国语言学专家布鲁恩斯认为,语言对环境的依赖性更大。因此,要学会为孩子营造外语氛围。比如双语校园、外语广播、外语角、外语动画片等等,并引导孩子在尽可能真实的动态情景中使用语言。董天祺说:“我在家里几乎只和孩子用德语对话,比如他渴了要喝水,但不会说‘水’这个单词,我就让他查词典,然后说给我听,不然不给他水喝。我还在家里的电视机、冰箱上都贴上小纸条,上面写着对应的德文单词,让他除了睡觉,每时每刻都在和德语打交道。这样用了8个月,孩子就能自如地听和说了。”

第三,期望值不能过高,对待儿童的语言错误要宽容和有耐心。只要不影响正常的教学、交际,就不要立即加以纠正,以减轻儿童的心理压力,增强他们的信心。第四,遵循语言获得的规律,首先是加强听力和说话训练,然后才是读写。第五,培养儿童良好的性格。施普纳说,性格开朗、自信心强的孩子要比性格内向、缺乏自信心的孩子外语学习成绩更好。第六,挑选合适的教学资料。第七,针对个体差异,选择适宜的教学方法。科学研究发现,约37%的儿童为触觉学习者,34%的儿童为听觉学习者,29%的儿童为视觉学习者。


微压锅和高压锅哪个更好

微压锅和高压锅的区别:1、锅内压力不同微压锅压力小于1.2大气压;而高压锅可以产生180KPA、190KPa的高压。2、加热速度不同微压锅加热速度比较慢,但是不会影响食物的营养;而高压锅加热速度快,对食物营养具有一定的破坏性。3、安全性不同微压锅安全性比较高,使用时可以打开盖住,不会存在过压爆炸的危险;而高压锅在使用过程中,不能将盖住打开,这样锅内压力过大,会存在爆炸的维修。电高压锅选购注意事项1、在选购电高压锅时,要根据个人喜好来选择,目前市面上的微电脑式电压力锅比较受人们欢迎,这种电高压操作比较方便,功能比较强大,但是价格更贵。2、选购电高压锅时要注意家庭人口数量,如果是2-3人的家庭,可以选择4升的电高压锅,3-5人的家庭,可以选择5升的电高压锅,6人以上的家庭,可以选择6升的电高压锅。3、要注意电高压锅的性能,检测内锅与电热盘接触是否良好,通电发热是否正常,轻触式按钮是否正常等问题。

劲赛商标已注册哪些类别?

劲赛已注册商标第11类(照明、加热、蒸汽发生、烹饪、冷藏、干燥、通风、供水以及卫生用装置。)该商标所属行业范围:灯,汽车灯,燃气炉,冷冻设备和机器,电吹风,水管龙头,淋浴热水器,浴室装置,水净化装置,非医用电热毯此商标注册的群组详情包含:1101:照明用设备、器具(不包括汽灯、油灯)1104:烹调及民用电气加热设备(不包括厨房用手工用具,食品加工机器)1105:制冷、冷藏设备(不包括冷藏车)1106:干燥、通风、空调设备(包括冷暖房设备)1108:水暖管件1109:卫生设备(不包括盥洗室用具)1110:消毒和净化设备1111:小型取暖器


赛井商标已注册哪些类别?

赛井已注册商标第11类(照明、加热、蒸汽发生、烹饪、冷藏、干燥、通风、供水以及卫生用装置。)该商标所属行业范围:灯,电炊具,冰柜,气体净化装置,加热装置,水管龙头,淋浴器,卫生器械和设备,消毒碗柜,电暖器此商标注册的群组详情包含:1101:照明用设备、器具(不包括汽灯、油灯)1104:烹调及民用电气加热设备(不包括厨房用手工用具,食品加工机器)1105:制冷、冷藏设备(不包括冷藏车)1106:干燥、通风、空调设备(包括冷暖房设备)1107:加温、蒸汽设备(包括工业用炉、锅炉,不包括机车锅炉、锅驼机锅炉、蒸汽机锅炉)1108:水暖管件1109:卫生设备(不包括盥洗室用具)1110:消毒和净化设备1111:小型取暖器


如何利用CEF3创建一个简单的应用程序

开始
首先,根据自身所使用的开发平台,可以去 这里 下载对应的发布版本。针对这个教程,我们需要下载1750或者更新的版本。当前支持的平台有Windows, Linux和Mac OS X。每一个版本都包含了当在特定平台上编译特定版本CEF3时所需要的所有文件和资源。您可以通过包含在里边的 REDME.txt 文件或者在Wiki上GeneralUsage 中的 Getting Started,了解每个发布版本的具体内容和细节。
编译发布版本中的项目
以CEF发布版本为基础开发的应用程序可以使用标准的平台编译工具进行编译执行。包括 Windows 平台下的 Visual Studio, Mac OS X 平台下的 Xcode, 以及 Linux 平台下的 gcc/make。针对平台的不同,项目的编译过程也有些许的不同和要求。
Windows
Windows 平台下编译 Cefsimple 步骤:
1. 用对应的 Visual Studio 版本打开项目解决方案。举个例子,如果你安装的是 Visual Studio 2010, 那么,打开的就是 cesimple2010.sln。
2. 如果你下载的是 x64版本,请确保你选择的是 x64的开发平台。
3. 开始编译。
4. 如果编译通过,那么,在当前解决方案的目录下,将出现“out/Debug”(或者 “out/Release”)文件夹。
5. 执行文件夹下 cefsimple.exe, 确保能正确运行。
加载一个自定义URL
cefsimple项目中默认加载的URL是 google.com,当然,你也可以用自定义的 URL 去替代它,最方便的就是通过命令行搞定。
# Load the local file “c:\example\example.html”
cefsimple.exe --url=file://c:/example/example.html

除了命令行的方法,也可以通过直接修改在 cefsimple/simple.cpp 文件中的代码,达到你的目的。
# Load the local file “c:\example\example.html”

if (url.empty())
url = file://c:/example/example.html;

应用程序组成
所有的 CEF 应用程序都有一下主要组成部分:
1. CEF 的动态链接库 。(在 Windows 平台下就是 libcef.dll)
2. 支持库。(ICU, FFMPEG等)
3. 资源。(html/js/css, strings等)
4. 客户端执行文件。(本教程中就是 cefsimple.exe.)
要点(必看)
1. CEF 使用的是多进程。应用程序主进程是浏览器进程,而其他子进程是由 renderer, plugins, GPU等创建。
2. 在 Windows 和 Linux 平台下的执行文件可以被主进程和子进程使用。
3. CEF 中所有进程都可以是多线程的。CEF提供了许多功能和接口在不同的线程中传递任务。
4. 一些回调方法和函数只能在特定的进程或者线程中使用。在你第一次使用新的回调方法或者函数之前,请确保你已经阅读了 API 头文件中源码,看使用要求。
流程分析
cefsimple 应用程序首先初始化CEF,然后创建了一个简单的弹出浏览器窗口。当关闭了所有的浏览器窗口,应用程序就会结束。程序执行流程如下:
1. 系统执行入口点函数(main or wWinMain),并创建浏览器进程。
2. 入口点函数:
1. 创建能够处理进程级别的回调方法的 SimpleApp 实例。
2. 初始化 CEF,进入 CEF 消息循环。
3. 初始化 CEF 之后,调用 SimpleApp::OnContextInitialized() 。这个方法中:
1. 创建单例的 SimpleHandler 。
2. 由 CefBrowserHost::CreateBrowsersync() 方法创建一个浏览器窗口。
4. 所有的浏览器共享 SimpleHandler 实例, 此实例能定制浏览器行为、处理浏览器相关回调方法(life span, loading state, title display等)。
5. 当一个浏览器窗口关闭的时候,调用 SimpleHandler::OnBeforeClose() 。当所有的浏览器窗口全部关闭时,OnBeforeClose() 函数就会执行跳出 CEF 消息循环的行为,退出应用程序。
入口点函数
程序的运行开始于浏览器进程中的入口点函数。这个函数会初始化 CEF 以及所有跟操作系统有关的对象。
Windows

#include

#include "cefsimple/simple_app.h"
#include "include/cef_sandbox_win.h"

// Set to 0 to disable sandbox support.
#define CEF_ENABLE_SANDBOX 1

#if CEF_ENABLE_SANDBOX
// The cef_sandbox.lib static library is currently built with VS2010. It may not
// link successfully with other VS versions.
#pragma comment(lib, "cef_sandbox.lib")
#endif

// Entry point function for all processes.
int APIENTRY wWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow) {
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);

void* sandbox_info = NULL;

#if CEF_ENABLE_SANDBOX
// Manage the life span of the sandbox information object. This is necessary
// for sandbox support on Windows. See cef_sandbox_win.h for complete details.
CefScopedSandboxInfo scoped_sandbox;
sandbox_info = scoped_sandbox.sandbox_info();
#endif

// Provide CEF with command-line arguments.
CefMainArgs main_args(hInstance);

// SimpleApp implements application-level callbacks. It will create the first
// browser instance in OnContextInitialized() after CEF has initialized.
CefRefPtr app(new SimpleApp);

// 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, app.get(), sandbox_info);
if (exit_code >= 0) {
// The sub-process has completed so return here.
return exit_code;
}

// Specify CEF global settings here.
CefSettings settings;

#if !CEF_ENABLE_SANDBOX
settings.no_sandbox = true;
#endif

// Initialize CEF.
CefInitialize(main_args, settings, app.get(), sandbox_info);

// Run the CEF message loop. This will block until CefQuitMessageLoop() is
// called.
CefRunMessageLoop();

// Shut down CEF.
CefShutdown();

return 0;
}

SimpleApp
SimpleApp 负责处理进程级别的回调方法。它会曝露出一些在多进程中共享或者被特定进程使用的接口和方法。CefBrowserProcessHandler 接口,在浏览器进程中调用。还有一个被分离出 CefBrowserProcessHandler 接口(例子项目没有展示)只会在渲染进程中被调用。由于 CefBrowserProcessHandler 不光实现了 CefApp, 同时还有 CefBrowserProcessHandler,所以它的返回值必须是[this]。

// simple_app.h
#include "include/cef_app.h"

class SimpleApp : public CefApp,
public CefBrowserProcessHandler {
public:
SimpleApp();

// CefApp methods:
virtual CefRefPtr GetBrowserProcessHandler()
OVERRIDE { return this; }

// CefBrowserProcessHandler methods:
virtual void OnContextInitialized() OVERRIDE;

private:
// Include the default reference counting implementation.
IMPLEMENT_REFCOUNTING(SimpleApp);
};

// simple_app.cpp
#include "cefsimple/simple_app.h"

#include

#include "cefsimple/simple_handler.h"
#include "cefsimple/util.h"
#include "include/cef_browser.h"
#include "include/cef_command_line.h"

SimpleApp::SimpleApp() {
}

void SimpleApp::OnContextInitialized() {
REQUIRE_UI_THREAD();

// Information used when creating the native window.
CefWindowInfo window_info;

#if defined(OS_WIN)
// On Windows we need to specify certain flags that will be passed to
// CreateWindowEx().
window_info.SetAsPopup(NULL, "cefsimple");
#endif

// SimpleHandler implements browser-level callbacks.
CefRefPtr handler(new SimpleHandler());

// Specify CEF browser settings here.
CefBrowserSettings browser_settings;

std::string url;

// Check if a "--url=" value was provided via the command-line. If so, use
// that instead of the default URL.
CefRefPtr command_line =
CefCommandLine::GetGlobalCommandLine();
url = command_line->GetSwitchValue("url");
if (url.empty())
url = "http://www.google.com";

// Create the first browser window.
CefBrowserHost::CreateBrowserSync(window_info, handler.get(), url,
browser_settings, NULL);
}

SimpleHandler
SimpleHandler 负责处理浏览器级别的回调方法。这些回调方法会在浏览器进程中执行。在这个项目中,针对所有的浏览器使用相同的 CefClient 实例,但是如果你愿意,可以在自己的应用程序中使用不同的 CefClient实例的。

// simple_handler.h
#include "include/cef_client.h"

#include

class SimpleHandler : public CefClient,
public CefDisplayHandler,
public CefLifeSpanHandler,
public CefLoadHandler {
public:
SimpleHandler();
~SimpleHandler();

// Provide access to the single global instance of this object.
static SimpleHandler* GetInstance();

// CefClient methods:
virtual CefRefPtr GetDisplayHandler() OVERRIDE {
return this;
}
virtual CefRefPtr GetLifeSpanHandler() OVERRIDE {
return this;
}
virtual CefRefPtr GetLoadHandler() OVERRIDE {
return this;
}

// CefDisplayHandler methods:
virtual void OnTitleChange(CefRefPtr browser,
const CefString& title) OVERRIDE;

// CefLifeSpanHandler methods:
virtual void OnAfterCreated(CefRefPtr browser) OVERRIDE;
virtual void OnBeforeClose(CefRefPtr browser) OVERRIDE;

// CefLoadHandler methods:
virtual void OnLoadError(CefRefPtr browser,
CefRefPtr frame,
ErrorCode errorCode,
const CefString& errorText,
const CefString& failedUrl) OVERRIDE;

// Request that all existing browser windows close.
void CloseAllBrowsers(bool force_close);

private:
// List of existing browser windows. Only accessed on the CEF UI thread.
typedef std::list > BrowserList;
BrowserList browser_list_;

// Include the default reference counting implementation.
IMPLEMENT_REFCOUNTING(SimpleHandler);
};

// simple_handler.cpp
#include "cefsimple/simple_handler.h"

#include
#include

#include "cefsimple/util.h"
#include "include/cef_app.h"
#include "include/cef_runnable.h"

namespace {

SimpleHandler* g_instance = NULL;


如何利用CEF3创建一个简单的应用程序

开始
首先,根据自身所使用的开发平台,可以去 这里 下载对应的发布版本。针对这个教程,我们需要下载1750或者更新的版本。当前支持的平台有Windows, Linux和Mac OS X。每一个版本都包含了当在特定平台上编译特定版本CEF3时所需要的所有文件和资源。您可以通过包含在里边的 REDME.txt 文件或者在Wiki上GeneralUsage 中的 Getting Started,了解每个发布版本的具体内容和细节。
编译发布版本中的项目
以CEF发布版本为基础开发的应用程序可以使用标准的平台编译工具进行编译执行。包括 Windows 平台下的 Visual Studio, Mac OS X 平台下的 Xcode, 以及 Linux 平台下的 gcc/make。针对平台的不同,项目的编译过程也有些许的不同和要求。
Windows
Windows 平台下编译 Cefsimple 步骤:
1. 用对应的 Visual Studio 版本打开项目解决方案。举个例子,如果你安装的是 Visual Studio 2010, 那么,打开的就是 cesimple2010.sln。
2. 如果你下载的是 x64版本,请确保你选择的是 x64的开发平台。
3. 开始编译。
4. 如果编译通过,那么,在当前解决方案的目录下,将出现“out/Debug”(或者 “out/Release”)文件夹。
5. 执行文件夹下 cefsimple.exe, 确保能正确运行。
加载一个自定义URL
cefsimple项目中默认加载的URL是 google.com,当然,你也可以用自定义的 URL 去替代它,最方便的就是通过命令行搞定。
# Load the local file “c:\example\example.html”
cefsimple.exe --url=file://c:/example/example.html

除了命令行的方法,也可以通过直接修改在 cefsimple/simple.cpp 文件中的代码,达到你的目的。
# Load the local file “c:\example\example.html”

if (url.empty())
url = file://c:/example/example.html;

应用程序组成
所有的 CEF 应用程序都有一下主要组成部分:
1. CEF 的动态链接库 。(在 Windows 平台下就是 libcef.dll)
2. 支持库。(ICU, FFMPEG等)
3. 资源。(html/js/css, strings等)
4. 客户端执行文件。(本教程中就是 cefsimple.exe.)
要点(必看)
1. CEF 使用的是多进程。应用程序主进程是浏览器进程,而其他子进程是由 renderer, plugins, GPU等创建。
2. 在 Windows 和 Linux 平台下的执行文件可以被主进程和子进程使用。
3. CEF 中所有进程都可以是多线程的。CEF提供了许多功能和接口在不同的线程中传递任务。
4. 一些回调方法和函数只能在特定的进程或者线程中使用。在你第一次使用新的回调方法或者函数之前,请确保你已经阅读了 API 头文件中源码,看使用要求。
流程分析
cefsimple 应用程序首先初始化CEF,然后创建了一个简单的弹出浏览器窗口。当关闭了所有的浏览器窗口,应用程序就会结束。程序执行流程如下:
1. 系统执行入口点函数(main or wWinMain),并创建浏览器进程。
2. 入口点函数:
1. 创建能够处理进程级别的回调方法的 SimpleApp 实例。
2. 初始化 CEF,进入 CEF 消息循环。
3. 初始化 CEF 之后,调用 SimpleApp::OnContextInitialized() 。这个方法中:
1. 创建单例的 SimpleHandler 。
2. 由 CefBrowserHost::CreateBrowsersync() 方法创建一个浏览器窗口。
4. 所有的浏览器共享 SimpleHandler 实例, 此实例能定制浏览器行为、处理浏览器相关回调方法(life span, loading state, title display等)。
5. 当一个浏览器窗口关闭的时候,调用 SimpleHandler::OnBeforeClose() 。当所有的浏览器窗口全部关闭时,OnBeforeClose() 函数就会执行跳出 CEF 消息循环的行为,退出应用程序。
入口点函数
程序的运行开始于浏览器进程中的入口点函数。这个函数会初始化 CEF 以及所有跟操作系统有关的对象。
Windows

#include

#include "cefsimple/simple_app.h"
#include "include/cef_sandbox_win.h"

// Set to 0 to disable sandbox support.
#define CEF_ENABLE_SANDBOX 1

#if CEF_ENABLE_SANDBOX
// The cef_sandbox.lib static library is currently built with VS2010. It may not
// link successfully with other VS versions.
#pragma comment(lib, "cef_sandbox.lib")
#endif

// Entry point function for all processes.
int APIENTRY wWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow) {
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);

void* sandbox_info = NULL;

#if CEF_ENABLE_SANDBOX
// Manage the life span of the sandbox information object. This is necessary
// for sandbox support on Windows. See cef_sandbox_win.h for complete details.
CefScopedSandboxInfo scoped_sandbox;
sandbox_info = scoped_sandbox.sandbox_info();
#endif

// Provide CEF with command-line arguments.
CefMainArgs main_args(hInstance);

// SimpleApp implements application-level callbacks. It will create the first
// browser instance in OnContextInitialized() after CEF has initialized.
CefRefPtr app(new SimpleApp);

// 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, app.get(), sandbox_info);
if (exit_code >= 0) {
// The sub-process has completed so return here.
return exit_code;
}

// Specify CEF global settings here.
CefSettings settings;

#if !CEF_ENABLE_SANDBOX
settings.no_sandbox = true;
#endif

// Initialize CEF.
CefInitialize(main_args, settings, app.get(), sandbox_info);

// Run the CEF message loop. This will block until CefQuitMessageLoop() is
// called.
CefRunMessageLoop();

// Shut down CEF.
CefShutdown();

return 0;
}

SimpleApp
SimpleApp 负责处理进程级别的回调方法。它会曝露出一些在多进程中共享或者被特定进程使用的接口和方法。CefBrowserProcessHandler 接口,在浏览器进程中调用。还有一个被分离出 CefBrowserProcessHandler 接口(例子项目没有展示)只会在渲染进程中被调用。由于 CefBrowserProcessHandler 不光实现了 CefApp, 同时还有 CefBrowserProcessHandler,所以它的返回值必须是[this]。

// simple_app.h
#include "include/cef_app.h"

class SimpleApp : public CefApp,
public CefBrowserProcessHandler {
public:
SimpleApp();

// CefApp methods:
virtual CefRefPtr GetBrowserProcessHandler()
OVERRIDE { return this; }

// CefBrowserProcessHandler methods:
virtual void OnContextInitialized() OVERRIDE;

private:
// Include the default reference counting implementation.
IMPLEMENT_REFCOUNTING(SimpleApp);
};

// simple_app.cpp
#include "cefsimple/simple_app.h"

#include

#include "cefsimple/simple_handler.h"
#include "cefsimple/util.h"
#include "include/cef_browser.h"
#include "include/cef_command_line.h"

SimpleApp::SimpleApp() {
}

void SimpleApp::OnContextInitialized() {
REQUIRE_UI_THREAD();

// Information used when creating the native window.
CefWindowInfo window_info;

#if defined(OS_WIN)
// On Windows we need to specify certain flags that will be passed to
// CreateWindowEx().
window_info.SetAsPopup(NULL, "cefsimple");
#endif

// SimpleHandler implements browser-level callbacks.
CefRefPtr handler(new SimpleHandler());

// Specify CEF browser settings here.
CefBrowserSettings browser_settings;

std::string url;

// Check if a "--url=" value was provided via the command-line. If so, use
// that instead of the default URL.
CefRefPtr command_line =
CefCommandLine::GetGlobalCommandLine();
url = command_line->GetSwitchValue("url");
if (url.empty())
url = "http://www.google.com";

// Create the first browser window.
CefBrowserHost::CreateBrowserSync(window_info, handler.get(), url,
browser_settings, NULL);
}

SimpleHandler
SimpleHandler 负责处理浏览器级别的回调方法。这些回调方法会在浏览器进程中执行。在这个项目中,针对所有的浏览器使用相同的 CefClient 实例,但是如果你愿意,可以在自己的应用程序中使用不同的 CefClient实例的。

// simple_handler.h
#include "include/cef_client.h"

#include

class SimpleHandler : public CefClient,
public CefDisplayHandler,
public CefLifeSpanHandler,
public CefLoadHandler {
public:
SimpleHandler();
~SimpleHandler();

// Provide access to the single global instance of this object.
static SimpleHandler* GetInstance();

// CefClient methods:
virtual CefRefPtr GetDisplayHandler() OVERRIDE {
return this;
}
virtual CefRefPtr GetLifeSpanHandler() OVERRIDE {
return this;
}
virtual CefRefPtr GetLoadHandler() OVERRIDE {
return this;
}

// CefDisplayHandler methods:
virtual void OnTitleChange(CefRefPtr browser,
const CefString& title) OVERRIDE;

// CefLifeSpanHandler methods:
virtual void OnAfterCreated(CefRefPtr browser) OVERRIDE;
virtual void OnBeforeClose(CefRefPtr browser) OVERRIDE;

// CefLoadHandler methods:
virtual void OnLoadError(CefRefPtr browser,
CefRefPtr frame,
ErrorCode errorCode,
const CefString& errorText,
const CefString& failedUrl) OVERRIDE;

// Request that all existing browser windows close.
void CloseAllBrowsers(bool force_close);

private:
// List of existing browser windows. Only accessed on the CEF UI thread.
typedef std::list > BrowserList;
BrowserList browser_list_;

// Include the default reference counting implementation.
IMPLEMENT_REFCOUNTING(SimpleHandler);
};

// simple_handler.cpp
#include "cefsimple/simple_handler.h"

#include
#include

#include "cefsimple/util.h"
#include "include/cef_app.h"
#include "include/cef_runnable.h"

namespace {

SimpleHandler* g_instance = NULL


html5 能开发windows窗体程序吗?

一般来说,html5的功能展示是依赖于浏览器的。浏览器提供了多少可调用的接口,使用html5就可以实现多少功能。但是浏览器一般不会实现html5完全访问或控制本地资源的权限,所以实现的功能还是有限的。\x0d\x0a 不过目前也有许多通过html5+css+js甚至结合其他语言实现的桌面程序。例如目前可以采用的方案举几个例子:\x0d\x0a1、Node-WebKit\x0d\x0a1.1 Node-WebKit能把HTML5应用打包成本地桌面应用,在Windows、Linux或Mac平台上,不需要其它依赖就可以独立运行你的HTML5应用。\x0d\x0a1.2 支持Node.js。可以使用Node.js的所有模块来开发app或游戏。不仅可以使用Node.js原生的模块,而且可以使用第三方的node.js模块。\x0d\x0a2、heX 是网易有道团队的一个开源项目,允许采用前端技术(HTML,CSS,JavaScript)开发桌面应用软件的跨平台解决方案。这个项目目前处于停滞状态。\x0d\x0a3、自己开发一下基于浏览器框架的应用。例如基于谷歌浏览器核心,前端使用浏览器渲染功能结合html5+css+js,后端使用c++开发。


html5能开发windows窗体程序吗?

一般来说,html5的功能展示是依赖于浏览器的。浏览器提供了多少可调用的接口,使用html5就可以实现多少功能。但是浏览器一般不会实现html5完全访问或控制本地资源的权限,所以实现的功能还是有限的。\x0d\x0a 不过目前也有许多通过html5+css+js甚至结合其他语言实现的桌面程序。例如目前可以采用的方案举几个例子:\x0d\x0a1、Node-WebKit\x0d\x0a1.1 Node-WebKit能把HTML5应用打包成本地桌面应用,在Windows、Linux或Mac平台上,不需要其它依赖就可以独立运行你的HTML5应用。\x0d\x0a1.2 支持Node.js。可以使用Node.js的所有模块来开发app或游戏。不仅可以使用Node.js原生的模块,而且可以使用第三方的node.js模块。\x0d\x0a2、heX 是网易有道团队的一个开源项目,允许采用前端技术(HTML,CSS,JavaScript)开发桌面应用软件的跨平台解决方案。这个项目目前处于停滞状态。\x0d\x0a3、自己开发一下基于浏览器框架的应用。例如基于谷歌浏览器核心,前端使用浏览器渲染功能结合html5+css+js,后端使用c++开发。


如何利用CEF3创建一个简单的应用程序

开始
首先,根据自身所使用的开发平台,可以去 这里 下载对应的发布版本。针对这个教程,我们需要下载1750或者更新的版本。当前支持的平台有Windows, Linux和Mac OS X。每一个版本都包含了当在特定平台上编译特定版本CEF3时所需要的所有文件和资源。您可以通过包含在里边的 REDME.txt 文件或者在Wiki上GeneralUsage 中的 Getting Started,了解每个发布版本的具体内容和细节。
编译发布版本中的项目
以CEF发布版本为基础开发的应用程序可以使用标准的平台编译工具进行编译执行。包括 Windows 平台下的 Visual Studio, Mac OS X 平台下的 Xcode, 以及 Linux 平台下的 gcc/make。针对平台的不同,项目的编译过程也有些许的不同和要求。
Windows
Windows 平台下编译 Cefsimple 步骤:
1. 用对应的 Visual Studio 版本打开项目解决方案。举个例子,如果你安装的是 Visual Studio 2010, 那么,打开的就是 cesimple2010.sln。
2. 如果你下载的是 x64版本,请确保你选择的是 x64的开发平台。
3. 开始编译。
4. 如果编译通过,那么,在当前解决方案的目录下,将出现逗out/Debug地(或者 逗out/Release地)文件夹。
5. 执行文件夹下 cefsimple.exe, 确保能正确运行。
加载一个自定义URL
cefsimple项目中默认加载的URL是 google.com,当然,你也可以用自定义的 URL 去替代它,最方便的就是通过命令行搞定。
# Load the local file 逗c:\example\example.html地
cefsimple.exe --url=file://c:/example/example.html

除了命令行的方法,也可以通过直接修改在 cefsimple/simple.cpp 文件中的代码,达到你的目的。
# Load the local file 逗c:\example\example.html地

if (url.empty())
url = file://c:/example/example.html;

应用程序组成
所有的 CEF 应用程序都有一下主要组成部分:
1. CEF 的动态链接库 。(在 Windows 平台下就是 libcef.dll)
2. 支持库。(ICU, FFMPEG等)
3. 资源。(html/js/css, strings等)
4. 客户端执行文件。(本教程中就是 cefsimple.exe.)
要点(必看)
1. CEF 使用的是多进程。应用程序主进程是浏览器进程,而其他子进程是由 renderer, plugins, GPU等创建。
2. 在 Windows 和 Linux 平台下的执行文件可以被主进程和子进程使用。
3. CEF 中所有进程都可以是多线程的。CEF提供了许多功能和接口在不同的线程中传递任务。
4. 一些回调方法和函数只能在特定的进程或者线程中使用。在你第一次使用新的回调方法或者函数之前,请确保你已经阅读了 API 头文件中源码,看使用要求。
流程分析
cefsimple 应用程序首先初始化CEF,然后创建了一个简单的弹出浏览器窗口。当关闭了所有的浏览器窗口,应用程序就会结束。程序执行流程如下:
1. 系统执行入口点函数(main or wWinMain),并创建浏览器进程。
2. 入口点函数:
1. 创建能够处理进程级别的回调方法的 SimpleApp 实例。
2. 初始化 CEF,进入 CEF 消息循环。
3. 初始化 CEF 之后,调用 SimpleApp::OnContextInitialized() 。这个方法中:
1. 创建单例的 SimpleHandler 。
2. 由 CefBrowserHost::CreateBrowsersync() 方法创建一个浏览器窗口。
4. 所有的浏览器共享 SimpleHandler 实例, 此实例能定制浏览器行为、处理浏览器相关回调方法(life span, loading state, title display等)。
5. 当一个浏览器窗口关闭的时候,调用 SimpleHandler::OnBeforeClose() 。当所有的浏览器窗口全部关闭时,OnBeforeClose() 函数就会执行跳出 CEF 消息循环的行为,退出应用程序。
入口点函数
程序的运行开始于浏览器进程中的入口点函数。这个函数会初始化 CEF 以及所有跟操作系统有关的对象。
Windows

#include

#include "cefsimple/simple_app.h"
#include "include/cef_sandbox_win.h"

// Set to 0 to disable sandbox support.
#define CEF_ENABLE_SANDBOX 1

#if CEF_ENABLE_SANDBOX
// The cef_sandbox.lib static library is currently built with VS2010. It may not
// link successfully with other VS versions.
#pragma comment(lib, "cef_sandbox.lib")
#endif

// Entry point function for all processes.
int APIENTRY wWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow) {
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);

void* sandbox_info = NULL;

#if CEF_ENABLE_SANDBOX
// Manage the life span of the sandbox information object. This is necessary
// for sandbox support on Windows. See cef_sandbox_win.h for complete details.
CefScopedSandboxInfo scoped_sandbox;
sandbox_info = scoped_sandbox.sandbox_info();
#endif

// Provide CEF with command-line arguments.
CefMainArgs main_args(hInstance);

// SimpleApp implements application-level callbacks. It will create the first
// browser instance in OnContextInitialized() after CEF has initialized.
CefRefPtr app(new SimpleApp);

// 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, app.get(), sandbox_info);
if (exit_code >= 0) {
// The sub-process has completed so return here.
return exit_code;
}

// Specify CEF global settings here.
CefSettings settings;

#if !CEF_ENABLE_SANDBOX
settings.no_sandbox = true;
#endif

// Initialize CEF.
CefInitialize(main_args, settings, app.get(), sandbox_info);

// Run the CEF message loop. This will block until CefQuitMessageLoop() is
// called.
CefRunMessageLoop();

// Shut down CEF.
CefShutdown();

return 0;
}

SimpleApp
SimpleApp 负责处理进程级别的回调方法。它会曝露出一些在多进程中共享或者被特定进程使用的接口和方法。CefBrowserProcessHandler 接口,在浏览器进程中调用。还有一个被分离出 CefBrowserProcessHandler 接口(例子项目没有展示)只会在渲染进程中被调用。由于 CefBrowserProcessHandler 不光实现了 CefApp, 同时还有 CefBrowserProcessHandler,所以它的返回值必须是[this]。

// simple_app.h
#include "include/cef_app.h"

class SimpleApp : public CefApp,
public CefBrowserProcessHandler {
public:
SimpleApp();

// CefApp methods:
virtual CefRefPtr GetBrowserProcessHandler()
OVERRIDE { return this; }

// CefBrowserProcessHandler methods:
virtual void OnContextInitialized() OVERRIDE;

private:
// Include the default reference counting implementation.
IMPLEMENT_REFCOUNTING(SimpleApp);
};

// simple_app.cpp
#include "cefsimple/simple_app.h"

#include

#include "cefsimple/simple_handler.h"
#include "cefsimple/util.h"
#include "include/cef_browser.h"
#include "include/cef_command_line.h"

SimpleApp::SimpleApp() {
}

void SimpleApp::OnContextInitialized() {
REQUIRE_UI_THREAD();

// Information used when creating the native window.
CefWindowInfo window_info;

#if defined(OS_WIN)
// On Windows we need to specify certain flags that will be passed to
// CreateWindowEx().
window_info.SetAsPopup(NULL, "cefsimple");
#endif

// SimpleHandler implements browser-level callbacks.
CefRefPtr handler(new SimpleHandler());

// Specify CEF browser settings here.
CefBrowserSettings browser_settings;

std::string url;

// Check if a "--url=" value was provided via the command-line. If so, use
// that instead of the default URL.
CefRefPtr command_line =
CefCommandLine::GetGlobalCommandLine();
url = command_line->GetSwitchValue("url");
if (url.empty())
url = "";

// Create the first browser window.
CefBrowserHost::CreateBrowserSync(window_info, handler.get(), url,
browser_settings, NULL);
}

SimpleHandler
SimpleHandler 负责处理浏览器级别的回调方法。这些回调方法会在浏览器进程中执行。在这个项目中,针对所有的浏览器使用相同的 CefClient 实例,但是如果你愿意,可以在自己的应用程序中使用不同的 CefClient实例的。

// simple_handler.h
#include "include/cef_client.h"

#include

class SimpleHandler : public CefClient,
public CefDisplayHandler,
public CefLifeSpanHandler,
public CefLoadHandler {
public:
SimpleHandler();
~SimpleHandler();

// Provide access to the single global instance of this object.
static SimpleHandler* GetInstance();

// CefClient methods:
virtual CefRefPtr GetDisplayHandler() OVERRIDE {
return this;
}
virtual CefRefPtr GetLifeSpanHandler() OVERRIDE {
return this;
}
virtual CefRefPtr GetLoadHandler() OVERRIDE {
return this;
}

// CefDisplayHandler methods:
virtual void OnTitleChange(CefRefPtr browser,
const CefString& title) OVERRIDE;

// CefLifeSpanHandler methods:
virtual void OnAfterCreated(CefRefPtr browser) OVERRIDE;
virtual void OnBeforeClose(CefRefPtr browser) OVERRIDE;

// CefLoadHandler methods:
virtual void OnLoadError(CefRefPtr browser,
CefRefPtr frame,
ErrorCode errorCode,
const CefString& errorText,
const CefString& failedUrl) OVERRIDE;

// Request that all existing browser windows close.
void CloseAllBrowsers(bool force_close);

private:
// List of existing browser windows. Only accessed on the CEF UI thread.
typedef std::list > BrowserList;
BrowserList browser_list_;

// Include the default reference counting implementation.
IMPLEMENT_REFCOUNTING(SimpleHandler);
};

// simple_handler.cpp
#include "cefsimple/simple_handler.h"

#include
#include

#include "cefsimple/util.h"
#include "include/cef_app.h"
#include "include/cef_runnable.h"

namespace {

SimpleHandler* g_instance = NULL;


上一篇:微型交流电机

下一篇:薇风