热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用Libcef创建基于浏览器的应用程序(1)

原文地址:http:www.cnblogs.comngxianyuarchive201312083463775.html作者:粘锅咸鱼很早之前看过关于豌豆荚的一片报道,说豌豆荚

原文地址: http://www.cnblogs.com/ngxianyu/archive/2013/12/08/3463775.html   作者:粘锅咸鱼


很早之前看过关于豌豆荚的一片报道,说豌豆荚花了10个月的时间,使用c++重新实现。其界面完全采用html实现。本人之前都是使用mfc开发windows界面,为了达到要求的界面效果,我花了大量的时间在界面重绘和贴图上,所以一听说居然还有人这么搞,无比激动。熟悉mfc开发的朋友们都知道,win32 api来实现界面效果,工作量是很大的,往往一个按钮半透明效果都能把你折腾个半死,而且极容易出错。但是如果直接在应用程序中,直接嵌入ie控件是有问题的,因为ie版本差异太大,对html5支持很难保证,而使用html开发界面的核心就是htmel5的那些很炫的功能。最好能把浏览器控件一起打包发布,这样可以完全不用系统的ie版本,只要支持一种浏览器就行,这样可以大大节省web开发的精力。

  第一次关注libcef是因为,我一个在杭州实习的朋友,回学校一起交流的时候跟我说过,网易云音乐使用最新的界面架构,使用的chrome那一套。我第一反应就是安装一个试试看,发现可执行文件目录下带有libcef.dll这个文件,遂搜索了一下,发现这正是实现纯html界面所需要的东西,而且这货居然支持离屏渲染(off-screen render),可以把渲染事件回调出来。这东西配合windows下的层叠窗口,就可以实现完全用html+css定义整个界面。试想,平时最蛋疼的窗口圆角,阴影,和透明效果,不用写一行贴图代码就能实现,这简直是帅到爆有木有!!

  下载下来,花了几天时间探索了一下,参照内置的里面的代码,跌跌撞撞的,居然实现了。但是还有很多细节自己也很糊涂,而且中途遇到了很多问题,所以写个一系列随笔记录一下。

  

  废话不多说,本篇介绍将libcef项目的基本配置。

  首先进入下载页面http://www.magpcss.net/cef_downloads/,选择如下链接

  下载下来后,使用vs2010打开cefclient2010.sln这个文件。打开后,有两个项目,cefclient,libcef_dll_wrapper。其中libcef_dll_wrapper是cef的头文件项目,而cefclient相当于cef库的使用示范,展示libcef库所支持的全部功能。想着如果只在原来的项目上修修改改,肯定不能了解将libcef嵌入到程序中的所有细节,所以另开了一个win32项目。步骤如下:

  1,在cefclient2010解放方案上右键,新建项目,选择win32项目,输入项目名称,点完成。

  

  2,点击下一步

  

  3,选择win32 项目,点击完成

  

  自此,解决方案中总的就有三个项目了。此时解决方案目录情况如下:

  

  接着,将对参考cefclient项目,对我们自己进行配置,来包含libcef的头文件,导入库文件。步骤如下:

  1,由于我们在解决方案中创建项目,自动会在sln的文件夹下面,创建以项目名称命名的项目文件夹,所以include目录就在父目录中,设置包含为父目录,方便引用到cef的头文件。

  

  2,将Debug和Release的运行库分别设置为MTD和MT

  

  

  3,去除预编译头

  

  4,将cefclient的附加库复制到本项目中

  

  5,复制cefclient的附加依赖项,并黏贴到我们自己的项目中

  

  至此,项目配置好了,接下来要拷贝一些依赖的头文件和库文件,还有语言包。

  1,打开项目文件加下的out目录

  

  2,把debug的如下文件复制到我们项目的debug输出目录,把release的如下文件复制到我们项目的release输出目录

  

  3,分别打开debug下和release的lib目录(下图为debug下的lib目录),将libcef_dl_wrapper分别复制到项目的debug和目录下

  

  好不容易,前期准备工作终于做好了。下一篇将讲解如何参照cefclient,构建一个基本的libcef嵌套程序。


推荐阅读
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文概述了在GNU/Linux系统中,动态库在链接和运行阶段的搜索路径及其指定方法,包括通过编译时参数、环境变量及系统配置文件等方式来控制动态库的查找路径。 ... [详细]
  • 本文详细介绍了如何使用Rufus工具制作一个兼容UEFI启动模式的Windows Server 2008 R2安装U盘,包括必要的软件和步骤。 ... [详细]
  • 使用 ModelAttribute 实现页面数据自动填充
    本文介绍了如何利用 Spring MVC 中的 ModelAttribute 注解,在页面跳转后自动填充表单数据。主要探讨了两种实现方法及其背后的原理。 ... [详细]
  • 本文探讨了Linux环境下线程私有数据(Thread-Specific Data, TSD)的概念及其重要性,介绍了如何通过TSD技术避免多线程间全局变量冲突的问题,并提供了具体的实现方法和示例代码。 ... [详细]
  • Docker基础入门与环境配置指南
    本文介绍了Docker——一款用Go语言编写的开源应用程序容器引擎。通过Docker,用户能够将应用及其依赖打包进容器内,实现高效、轻量级的虚拟化。容器之间采用沙箱机制,确保彼此隔离且资源消耗低。 ... [详细]
  • selenium通过JS语法操作页面元素
    做过web测试的小伙伴们都知道,web元素现在很多是JS写的,那么既然是JS写的,可以通过JS语言去操作页面,来帮助我们操作一些selenium不能覆盖的功能。问题来了我们能否通过 ... [详细]
  • 本文探讨了在AspNetForums平台中实施基于角色的权限控制系统的方法,旨在为不同级别的用户提供合适的访问权限,确保系统的安全性和可用性。 ... [详细]
  • LoadRunner中的IP欺骗配置与实践
    为了确保服务器能够有效地区分不同的用户请求,避免多人使用同一IP地址造成的访问限制,可以通过配置IP欺骗来解决这一问题。本文将详细介绍IP欺骗的工作原理及其在LoadRunner中的具体配置步骤。 ... [详细]
  • 本文探讨了Java编程语言中常用的两个比较操作符==和equals方法的区别及其应用场景。通过具体示例分析,帮助开发者更好地理解和使用这两个概念,特别是在处理基本数据类型和引用数据类型的比较时。 ... [详细]
  • 使用REM和媒体查询实现响应式布局
    本文介绍如何利用REM单位和媒体查询(Media Queries)来创建适应不同屏幕尺寸的网页布局。通过具体示例,展示在不同屏幕宽度下如何调整页面元素的样式。 ... [详细]
  • 我在尝试将组合框转换为具有自动完成功能时遇到了一个问题,即页面上的列表框也被转换成了自动完成下拉框,而不是保持原有的多选列表框形式。 ... [详细]
  • 本文详细介绍了Socket在Linux内核中的实现机制,包括基本的Socket结构、协议操作集以及不同协议下的具体实现。通过这些内容,读者可以更好地理解Socket的工作原理。 ... [详细]
  • 本文介绍了一种在 Android 开发中动态修改 strings.xml 文件中字符串值的有效方法。通过使用占位符,开发者可以在运行时根据需要填充具体的值,从而提高应用的灵活性和可维护性。 ... [详细]
  • 本文总结了 #define 在 C/C++ 编程中的多种用途和技巧,包括定义常量、函数、宏以及条件编译等,并提供了详细的示例和注意事项。 ... [详细]
author-avatar
我的小姑奶奶呦_960
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有