已经使用CEF来呈现桌面程序界面大半年了,从来没有写过相关博文。发现网上的中文资料甚至英文已经无法满足我的开发需求,不少问题只得自己探索。在此先谢过网络上各位CEF使用开发博文的贡献者,没有你们我也难易快速入手。实在惭愧,由于精力有限,自己捣鼓出来的东西一直没有贡献出来。好吧,从今天开始,面朝大海,春暖花开。

原先公司的C++程序界面用GDI+来做,甚是麻烦。后来客户想要类似豌豆荚那样的风格,小清新。研究了下豌豆荚,发现它的界面八成是JavaScript,用CEF来嵌入Web页面。此前也听一朋友提过Chrome源码之类云云,也知道现在不少桌面程序界面用JavaScript来做,开发效率高于C++。一直烦心于C++的界面开发,不安分的我也有极大的兴趣去做新的尝试,青春在于折腾。不过公司的程序一直以来采用的是WebBrowser控件,作为过渡,先在其上做界面。JavaScript边学边做,没办法,小公司,好多事情都要自己干,俨然成了一个全栈程序猿。

真正使用CEF的契机来自于一个棘手的问题。引入了一个JQuery图表插件来显示饼状图。但考虑到客户的运行环境多元化,IE各个版本都有哦,甚至于IE6还占到20%以上。一次兼容性测试,发现该插件在IE8上死活用不了,调了两天,搞不定。一怒之下,花了一周,替换成了CEF,为了解决C++与JavaScript互相调用产生死锁,做了消息循环队列,来进行异步调用,也大致理解NodeJs采用异步的妙处。此后种种日后再做分说。

当然CEF对于HTML5、CSS3以及JavaScript标准的支持确实很棒,可定制性也很高,不过从另一层面也因为它的灵活带来了不少的麻烦。比如没有IE那样的右键菜单,要自己做,如果不去修改CEF的内部代码,还需要去HOOK,但这些也着实是乐趣无穷。

从今天起,记录CEF使用开发心得经验的更多相关文章

  1. 安卓版App开发心得

    从2016年4月到6月主要做的工作是网站的开发,而6月到现在2016年8月初,主要做的工作是Android和IOS两种App的开发,又以Android为主. 将这段时间的Android开发心得记录如下 ...

  2. NodeJS版本EasyDarwin开源流媒体服务器开发心得

    title: Node版本EasyDarwin开发心得 date: 2018-03-27 22:46:15 tags: 年后着手Node版本EasyDarwin的开发工作,截止到今天2018年03月2 ...

  3. AEAI Portlet开发心得

    1 背景概述 Portlet是AEAI Portal组件API,是基于Java的Web组件,由Portlet容器管理,并由容器处理请求,生产动态内容.AEAI Portal中已经预置了许多Portle ...

  4. Qt在线技术交流之OpenGL、Quick以及所经历项目开发心得分享

    时间:3月25日晚上7:30 主题:Qt在线技术交流之OpenGL.Quick以及所经历项目开发心得分享 直播:http://qtdream.com 主页.全民TV,可能会加上其他的直播平台进行转播 ...

  5. QQ空间里写的开发心得

    不回头看一眼还真没发现我已经写过这么多开发心得日志. 理一理设备数据走向  https://user.qzone.qq.com/1156740846/blog/1522292793 action的生命 ...

  6. Java程序员转Android开发必读经验分享

    小编最近几日偷偷的发现部分Java程序员想转安卓开发,故此加紧补充知识,为大家搜集资料,积极整理前人的经验,希望可以给正处于困惑中的你,带来些许的帮助. 啰哩啰嗦的说说Java和Android程序的区 ...

  7. Java2年开发工作经验面试总结

    Java2年开发工作经验面试总结最近换了个公司,从二月底开始面,面到三月底,面了有快二十五家公司.我是一个喜欢总结经验的人,每经过一场面试,我在回来的路上都会仔细回想今天哪些问题可以答的更好,或者哪些 ...

  8. thinkphp开发技巧经验分享

    thinkphp开发技巧经验分享 www.111cn.net 编辑:flyfox 来源:转载 这里我给大家总结一个朋友学习thinkphp时的一些笔记了,从变量到内置模板引擎及系统变量等等的笔记了,同 ...

  9. 我的 Android 开发实战经验总结

    我的 Android 开发实战经验总结 字数4440 阅读5137 评论43 喜欢250 曾经一直想写一篇总结 Android 开发经验的文章,预计当时的我还达不到某种水平,所以思路跟不上,下笔又捉襟 ...

随机推荐

  1. SQL Server 事务语法

    事务全部是关于原子性的.原子性的概念是指可以把一些事情当做一个单元来看待.从数据库的角度看,它是指应全部执行或全部都不执行的一条或多条语句的最小组合. 为了理解事务的概念,需要能够定义非常明确的边界. ...

  2. 单元测试中使用Moq对EF的DbSet进行mock

    刚用上Moq,就用它解决了一个IUnitOfWork的mock问题,在这篇博文中记录一下. 开发场景 Application服务层BlogCategoryService的实现代码如下: public ...

  3. TPL实现Task.WhileAll扩展方法

    文章翻译整理自 Nikola Malovic 两篇博文: Task.WhileAll Awaitable task progress reporting 当 Task.WhenAll 遇见 Task. ...

  4. [ucgui] 对话框5——鼠标位置和移动窗口

    >_<" 这节主要是获取鼠标的位置和把窗口设置为可以移动.其中设置窗口可以移动用FRAMEWIN_SetMoveable(hFrameWin, 1)就行了.而获得鼠标位置则是利用 ...

  5. Windows 8.1 开发过程中遇到的小问题(2)

    又是在Windows 8.1 的分享功能,再次出现错误: A COM call (IID: ***, method index: *) to an ASTA (thread *) was blocke ...

  6. .net使用FluentValidation进行服务端验证。

          背景 最近使用asp.mvc 做一个在线口语系统项目,在服务端验证问题遇到了一些小问题. 自己根据数据库表user定义一个数据库表实体对象UserDbEntity [Table(" ...

  7. paip.元数据驱动的转换-读取文件行到个list理念 uapi java php python总结

    paip.元数据驱动的转换-读取文件行到个list理念 uapi java php python总结 #两个思路 1.思路如下:使用file_get_contents()获取txt文件的内容,然后通过 ...

  8. (笔记)VC6插件安装(VC6LineNumberAddin)

    VC6插件安装步骤如下: 1.下载VC6LineNumberAddin插件及注册文件.(以下是参考链接:) http://files.cnblogs.com/files/tdyizhen1314/VC ...

  9. C++11中async中future用法(一)

    async意味着异步执行代码,看如下示例: #include <future> #include <thread> #include <chrono> #inclu ...

  10. Leetcode 190 Reverse Bits 位运算

    反转二进制 class Solution { public: uint32_t reverseBits(uint32_t n) { uint32_t ans = ; ; i<; ++i,n &g ...