转载请说明出处,谢谢~~

原本的duilib是自带浏览器控件的,但是使用了IE内核,我在做仿酷狗音乐播放器时,在右侧乐库要用到浏览器控件,而我使用自带的IE控件却发现了不少缺点,这也是duilib一直没有解决的,编程群里的朋友也反映IE控件不好用。而目前最常用的浏览器内核一个是IE内核,另一个是webkit内核。

先简单介绍一下这个webkit内核
            WebKit 是一个开源浏览器引擎,与之相对应的引擎有Gecko(Mozilla
Firefox 等使用)和Trident(也称MSHTMLIE 使用)。同时WebKit
也是苹果Mac OS X 系统引擎框架版本的名称,主要用于SafariDashboardMail 和其他一些Mac
OS X
 程序。WebKit 前身是 KDE 小组的 KHTML,WebKit 所包含的 WebCore 排版引擎
JSCore 引擎来自于 KDE 的 KHTML 和
KJS,当年苹果比较了 Gecko 和 KHTML 后,仍然选择了后者,就因为它拥有清晰的源码结构、极快的渲染速度。Apple
KHTML 发扬光大,推出了装备 KHTML 改进型 WebKit 引擎的浏览器 Safari。
             WebKit 内核在手机上的应用也十分广泛,例如 Google 的手机Android
Apple 的 iPhone, Nokia’s Series 60 browser 等所使用的 Browser 内核引擎,都是基于 WebKit。
WebKit是开源的Web浏览器引擎,苹果的Safari、谷歌的Chrome浏览器都是基于这个框架来开发的。WebKit 还支持移动设备和手机,包括iPhone和Android手机都是使用WebKit做为浏览器的核心。 
            可以看到webkit的前景非常不错,谷歌和苹果的各个产品,包括现在流行的安卓和IOS系统,他们的浏览器都才用webkit内核,大有取代IE内核的意思。而且webkit是开源免费的!
            昨天我在网上搜索了webkit的相关产品,先是著名的cef,下载下来以后发现他编译后40M大,功能很强大,当然用起来比较复杂,查阅了相关资料,尝试封装了一下,但是发现难度较大。而且40M对于我这样只为了显示网页的需求来说太大了。如果是为了专门制作个浏览器,那么使用cef是很不错的。
            然后我下载EAWebkit,这个内核是基于webkit的精简封装,编译后只有3M大,用起来简单,但是和群里的朋友交流后得知这个内核不稳定,还存在较多bug,所以我也果断放弃了。
            最后四方打听,知道了这个wke内核,这个内核是国人BlzFans发布的开源免费内核,一个相当好的代码,在此先感谢BlzFans的工作!
            这个wke内核是为了在3D游戏中嵌入网页和flash而开发的,支持最新的HTML5和CSS3技术,兼容性和速度都不错。
            今天花了一上午把这个内核封装为了duilib的浏览器控件,效果如下。 

封装起来还是挺顺利的,有自带的win32demo,了解了他的工作过程,使用这个内核很简单,一个头文件,一个库文件,一个dll,只有这个3个文件。我在duilib里,仿照了CRichEditUI的封装过程。制作了CWkeWebkitUI控件作为浏览器控件。这个CWkeWebkitU控件继承了CControlUI控件,来更好的兼容duilib,然后在控件内部我封装了CWkeWebkitWnd类,CWkeWebkitU控件初始化时会建立CWkeWebkitWnd类,这个CWkeWebkitWnd类会使用Createwindow函数先建立一个子窗体,并且使用了WS_VISIBLE
| WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN样式,WS_CHILD让这个新建的窗体成为主窗体的子窗体,然后添加WS_CLIPSIBLINGS | WS_CLIPCHILDREN样式,这两个样式很关键,他可以让主窗体刷新时不去刷新子窗体,否则不加这个样式,就会因为主窗体频繁的刷新导致浏览器控件的卡顿。解决了核心问题,然后就是处理webkit内核的消息,仿照了原代的demo,我把各个消息处理后,就封装好了这个控件,并且增加了几个简单的接口来方便外部的调用。
            结束,休息一下~~

2014.7.25  15:50  Redrain

将webkit内核封装为duilib的浏览器控件的更多相关文章

  1. 给Webkit内核的浏览器控件增加互交功能

    转载请说明出处,谢谢~~ 昨天封装了基于webkit的wke浏览器内核,做成了duilib的浏览器控件,实现了浏览功能,但是单单的浏览功能还不满足需求,在我的仿酷狗项目中乐库的功能需要与浏览器互交. ...

  2. 基于wke封装的duilib的webkit浏览器控件,可以c++与js互交,源码及demo下载地址

    转载请说明原出处,谢谢~~ 前些日子用wke内核封装了duilib的webkit浏览器控件,好多群里朋友私聊我希望可以我公布源码,今天把这个控件的源码和使用demo公布.其实这个控件封装起来没什么难度 ...

  3. duilib 的IE浏览器控件去边框和去滚动条的代码

    近些天在duilib群里经常有朋友问起,怎么让duilib的IE控件可以去边框,去滚动条的问题,或者是如何去控件IE控件的行为.为了避免重复的回答,我就写一篇博文,把处理方法说明一下. duilib中 ...

  4. duilib 的IE浏览器控件去边框和去滚动栏的代码

    转载请说明原出处,谢谢~~ 近些天在duilib群里常常有朋友问起,怎么让duilib的IE控件能够去边框.去滚动栏的问题,或者是怎样去控件IE控件的行为.为了避免反复的回答,我就写一篇博文,把处理方 ...

  5. CEF中文教程(google chrome浏览器控件) -- Windows下编译Chromium

    CEF中文教程(google chrome浏览器控件) -- CEF简介 2013-04-10 16:48 42928人阅读 评论(4) 收藏 举报  分类: CEF(2)    目录(?)[+]   ...

  6. java浏览器控件jxbrowser(简单demo模拟自动登录与点击)

    写在前面: 老大让我写个脚本自动给他写dms有一段时间了,说实话当时不知道老大指的这个脚本是什么?毕竟是做web的,难道是写个数据库sql语句脚本吗?也就放在了一边.巧了,最近一个朋友说他之前写了个程 ...

  7. 改进duilib的richedit控件的部分功能

    转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/41208207 如果要使用透明异形窗体功能,首先要改进duilib库让他本 ...

  8. duilib修复ActiveXUI控件bug,以支持flash透明动态背景

    转载请说明原出处,谢谢~~ 昨天在QQ控件里和同学说起QQ2013登陆窗体的开发,从界面角度考虑,单单一个登陆界面是很容易做出来的.腾讯公司为了 防止各种盗号行为可谓煞费苦心,QQ2013采用了动态背 ...

  9. 关于WebBrowser(浏览器)控件的调用

    原文:关于WebBrowser(浏览器)控件的调用 在VS.NET2002和2003中,要应用WebBrowser(浏览器)控件,得用InterOp,刚开始用的时候很正常,后来不知道为什么窗口一打开就 ...

随机推荐

  1. [杂题]HDOJ5515 Game of Flying Circus

    嗯...这是一道水题... 鉴于还没人写这题的题解, 那我就来写一发. 题意:有个边长为300米的正方形 嗯  这样标号 有两个人A和S,开始的时候A.S都在1(左下角)那个位置. 两个人都要按照2. ...

  2. 华为3C抢购难度

    上周小米2S降价到1299买了一个,今天突然想体验一下抢购红米和3C的难度.万一抢到了,拿到手机市场贵100块钱卖掉,然后可以请女神吃个饭~~~哈哈哈哈! 结果确实不怎么好抢.刚刚试了一下3C: 验证 ...

  3. 【Linux高频命令专题(2)】awk

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  4. spring mvc 常用注解

    1.@requestMapping注解,绑定指定的url,requestmapping注解的属性值有value和method. requestmaping可以作用在类上或者方法上 如:@Request ...

  5. winserver2008,运行可执行文件,提示 激活上下文生成失败。 找不到从属程序集 Microsoft.VC90.DebugCRT,processorArchitecture="x86"

    首先我运行的可执行文件是在win7下使用vs2008生成的release版本的文件,为什么在运行的时候提示需要DebugCRT? 另外我在winserver2008上是安装了vc2008的运行环境的. ...

  6. Excel多条件筛选求和

    单位A 代码B 面积(㎡)C A组 011 124 A组 123 15 A组 011 356 A组 123 44 B组 123 31 B组 011 2 B组 123 2 按照单位和代码求面积的和,可以 ...

  7. Android Navigation Drawer,自定义ActionBar(标题居中)

    整个示例都是改造自 Google Android Training 中的 NavigationDrawer 示例(http://developer.android.com/training/imple ...

  8. 基于SimHash的微博去重

    一.需求:对微博数据进行去重,数据量比较小,几十万条左右. 二.解决方案 1.采用SimHash的指纹信息去重方法. 三.实现方案 1.对每一条微博使用tf-idf与特征词 2.使用每条微博的特征词, ...

  9. 转:socket编程在windows和linux下的区别

    如无其它说明,本文所指Linux均表示2.6内核Linux,GCC编译器,Windows均表示Windows XP系统,Visual Studio 2005 sp1编译环境. 下面大概分几个方面进行罗 ...

  10. MyBatis学习总结3-优化MyBatis配置文件

    连接数据库配置优化 可以将数据库连接配置信息卸载conf.xml中,但是为了优化连接,专门写一个properties用于存数据库连接信息,然后在conf.xml中进行引用,里面包括数据库驱动,地址,用 ...