- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于WinCE Widget引擎System DOM设计与实现
基于WinCE Widget引擎System DOM设计与实现
摘要 Widget是近年流行的概念,该文介绍了Widget的应用背景、基于WinCE平台的Widget引擎的组成、引擎中的CoreDOM,System DOM概念。文中详细给出了我们这种Widget引擎中System DOM的设计原理和实现方法。
关键词 Widget;引擎; CoreDOM;System DOM
中图分类号TP31 文献标识码A 文章编号 1674-6708(2010)31-0204-02
1 Widget是什么
Widget 是小工具的意思。Widget的设计理念就是使在我们桌面,手机,网页等平台运行的任何工具都能更换皮肤,拥有个性化的外观。Widget应用广泛,目前在PC桌面上常见的有vista,Win7的侧边工具栏,在手机上比如苹果的iphone、Google的Android、Nokia的S60等主流手机系统都已经添加了很多Widget应用。
2 Widget引擎组成
需要安装Widget引擎才能够运行Widget工具。我们的Widget引擎是在WinCE上实现的一个基于JavaScript的应用程序平台,主要是参考Yahoo!Widget Engine设计的,它能够支持大部分的Yahoo Widgets。我们的Widget引擎主要由以下部分组成:XML解析器,JavaScript引擎,cairo图像库等。
3 System DOM(系统文档对象模型)
每个Widget都是作为单独的程序执行,Widget一般都是一个压缩包(其实就是.zip格式),运行时,引擎负责解析压缩包中的内容。压缩包里面有一个.kon文件,.kon文件是Yahoo!Widget的文件格式,它是采用XML格式来定义的。.kon文件中有很多XML标签,比如、、,这几种标签标识的内容分别是窗口、图片和动作,他们都是属于引擎中的CoreDOM,当然CoreDOM还有很多种,比如Text,Frame等。CoreDOM主要描述组成一个widget的对象和这些对象的属性。而另外有些标签如: 、、等这些是标识系统方面的东西,它们是属于System DOM。System DOM主要是指一些系统的属性和函数,它们用来帮助JavaScript脚本来访问系统的信息,或者底层硬件信息。
4 System DOM设计
4.1 JavaScript
我们采用的JavaScript引擎是SpiderMonkey,它是FireFox浏览器的JavaScript引擎。通过System DOM的设计,在C++程序中执行JavaScript 脚本,并让JavaScript脚本访问C++对象的数据和执行操作,这样也就能达到SystemDOM访问系统属性和底层硬件信息的要求。
为了能运行JavaScript脚本首先得建立JavaScript运行环境,主要是JavaScript Runtime、Context和全局对象。这里不详细介绍。建立好运行环境后,就需要添加System DOM。我们以cpu这个System DOM作为例子。
4.2定义JS类
首先需要定义一个C++类,这个类主要实现C++对象的方法,比如我们的System DOM 中有一个cpu,我们在JavaScript代码中执行cpu. activity,就能得到cpu的利用率,这时,我们需要建立一个C++类Cpu,然后在类中实现一个getCpuUsage()方法,来获取cpu的利用率。有的情况比较简单,可以不用实现添加C++类也行,比如screen,system.memory等这些System DOM。
定义完C++使用的类后,需要再定义一个C++类给JavaScript类使用,这里我们取名为JSCpu。虽然这个类也是C++类,但是它内部需要添加SpiderMonkey定义的结构类型JSClass和回调函数等方法,我们为了好识别类名前面添加JS,我们相应的称这个类为JSCpu。
在JSClass结构体类型中,包含有JavaScript类的名字、标志位以及给脚本引擎用的回调函数的名字。这里的回调函数的作用包括设置属性数据、获取属性数据、类的析构等,可以根据自己的需要在JSCpu类中定义。回调函数在类中都是以静态成员函数存在,之所以JSClass结构体对象和回调函数都是静态的,是因为我们需要在没有对象的情况下调用这些函数。
4.3定义回调函数
回调函数主要包括以下几种:JSSetProperty,JSGetProperty,JSConstructor,JSDestructor。
JSGetProperty和JSSetPrope
文档评论(0)