金山卫士界面库——了解篇
最近一周了解了一下金山卫士开源库中的界面部分。
因为感兴趣的只是界面的部分,所以始终没下完整的代码,而是直接采用前人已经分离的库。
目的是使用的这套库做开发,所以目前没有对库本身的实现做很多了解,只是使用。
所有资料均也可以在金山开源论坛找到。地址是 bbs.code.ijinshan.com
概况,目前分离的界面库主要有
openkui,好像也叫kui,是由开源代码中CKuiXXX系列的界面库整理而成
bkwin,是由开源代码中CBkXXX系列的界面库,或者是部分,或者只是一个称呼,(有多个包叫bkWin,但内容又不相同)
bkuilib,也是开源代码中CBkXXX系列的界面库整理而成
后面的过程就是通过运行演示程序,初步体会使用界面库
本人在此之前从未接触过WTL,一直在用MFC,开始也走了些弯路
开发环境是XP + VS2008Pro
结论及分析
有人说bkwin比kui新,也有人说只是两个体系,目前尚无定论,我更倾向于后者。
-----------------------------------------------------------
openkui,最先拿到的就是openkui,可以通过对照维护者blog上的说明进行生成
但需要注意的是,
1,网上有多个资源,有些可能是旧版,需要做的工作较多,最好从googlecode的svn下载最新的。
2,没有编译kscbase.vcproj的sln,自己生成一个或者把kscbase.vcproj加入kui.sln中;
3,debug配置是完整的,而release配置是不同的(引用路径等),如果发现一个能生成另一个不能,请参考1;
好处:
1,引用比较简单,只需直接引用kuilib.h头即可,有做成单独库的潜质。
2,有CKuiApp等,使用起来有点像MFC
3,界面资源使用zip打包,可以比较好的进行控制
4,工程中直接添加了wtl,tinyxml,zlib等第三方库,方便环境配置和管理
5,有一个界面编辑器,尽管是Alpha的,免费不开源的,但目前是唯一的有这个的
不足:
1,工程目录结构复杂,文件分散,有改进的余地。
2,头文件中很多处直接使用了3级以上的目录结构,感觉会有隐患;
3,tinyxml的cpp重复包含导致很多警告,zlib的警告,全局g_hInstance等等。
4,讲解资源偏少,这个对0基础的人很麻烦
================================================
bkwin,是论坛中讲解教程的中的文档,边听讲解边操作,很容易程序就通了。
但要注意的是:
教程中提到修改myApp.rc中的#include "atlres.h"为#include "wtl/atlres.h",避免找不到altres.h,
但这样修改存在一个问题就是,一旦通过vs修改rc文件,则vs会将此处复原,所以建议增加wtl目录为工程附加包含目录
论坛上还有一个文字版的入门,内容是不完整的,缺少了如何添加bkres部分资源等关键问题,做出来的界面是白茫茫的,即bkwin界面未显示
好处:
1,简单容易上手快,研究的人相对较多,
2,资源使用的文件,方便
缺点:
1,没有图形界面的设计器,需要自己写xml
2,教程中都需要配置开发环境,WTL和tinyxml等,不过经过简单改变,也可以将其集成到工程中
3,有多个包,但版本不同,有些乱。
----------------------------------------------------------------------------
bkuilib,是经过整理的bkwin,结构比较清爽
但要注意的是:
需要配置WTL,tinyxml环境,其中WTL的配置是常规配置
tinyxml比较特殊,首先是采用lib形式引入,可以自行改成源码形式;另外就是tinyxml版本要求在2.6.1以上,同时衍生一个问题bkwin的版本
不知道是不是维护者自行修改的。
好处:
1,代码目录结构清晰,
2,和bkwin基本一致,
缺点:
1,如果其中有自行修改的部分,随着bkwin升级,是否可能有隐患;
2,同样没有界面设计器
3,和bkwin比,有部分增加的代码,情况还不了解
4,项目配置中的tinyxml和wtl的配置有改进余地