Windows客户端开发简介(二)

oldmanzhao 2015-02-12 01:41:54
加精
Windows客户端开发简介(二)

一个典型的Windows客户端程序要有哪几部分构成呢?下面我会以一个国内比较流行的互联网客户端程序的基本架构来跟大家逐步展开分析,由于涉及到知识产权的问题,请大家不要问我是什么产品,当然,如果你能猜到,那我就管不着了^_^。

某视频影音互联网PC客户端产品基本架构


如上只是个粗略的分层架构图,没有更细致的划分,但是有几个地方是需要特别关注的,比如最上层的那几个部分,音视频解码引擎,UI引擎,WebKit浏览器内核,内核通信模块,日志系统。

因为音视频解码引擎和内核通信模块只是对于视频客户端和P2P通信特有的,不具有通用性,所以我这里不做特别介绍。

首先我们要来重头介绍一下UI引擎

所谓的UI引擎就是通常所说的界面库,对于客户端产品来说,UI开发占了很大篇幅,UI的好坏会直接印象用户的最直观体验,因此一个好的界面库实在是重中之重。

那么什么样算是好的UI引擎呢?从功能角度说首先配置方便,能快速的修改界面,或者完成界面的重建;其次要有功能丰富的控件,能够满足各种各样的UI需求。从技术角度说,界面库的移植性要好,比如绘制层和展现层分离,这样在跨平台的时候就只需要修改绘制层的代码,而上层的客户端UI代码不需要做太大修改。其次伸缩性,伸缩性好在界面库本身控件不够丰富的情况下可以快速的进行开发新控件,这里面就跟面向对象技术有很大关系。再其次,UI界面库应该有比较好的扩展性,比如在现有控件不足的情况下,可以直接与平台原生控件结合,这样在界面控件元素缺少的情况下可以快速的利用本平台原生控件进行弥补。

现在的界面库发展大致经历了四个阶段

一、最早的用Windows API进行界面开发的阶段

这时期的界面相对比较简单,图片还用的比较少,软件结构也不是特别复杂,因而这个阶段上界面甚至还谈不上独立出来的引擎,基本和数据层和通信层是整合在一起的。

在这个阶段上,如果你要创建一个窗口,需要调用一大堆的Windows API,需要手动创建消息循环,需要调用诸如CreateWindow这样的API并进行相应的消息处理。

二、以MFC、WTL为代表的第二代界面库

这个阶段上由于面向对象技术的发展(主要是C++),Windows平台上出现了像MFC这样的C++封装界面库。它的主要特点是利用了C++的多态,封装等C++特性,比如把窗口进行封装,把窗口视作一个对象,对窗口的处理视作施加在窗口类对象上的行为。虽然引入了面向对象的概念,但是本质上而言,这还是一种用代码来拼凑界面的办法,对UI开发人员还是有比较高的要求的。

在这个阶段上,如果你要创建一个窗口,相对工作量要少一点,派生两个类,消息循环已经封装在里面,覆盖它们的虚函数,在里面做一些初始化操作就可以了。

三、以QT为代表的第三代界面库

QT使用了一种用QML这种描述性脚本语言配置界面的办法,这种开发界面的方法在效率上与前面两代产品有很大的提高,学习成本也低了很多。

在这个阶段上,如果你要创建一个窗口,只需要在QML的编辑器中进行可视化的创建修改就可以了,QT会编译相应的QML文件到你的应用程序中,某种程度上说,你甚至不需要懂C++也可以完成界面的基本开发。

四、以XML配置为特征的第四代界面库

在Windows平台上,有WPF,Silverlight这样的技术,也有XUL(FireFox所采用的UI引擎)这样的界面库。现在很多的国产界面库也算作是这种类型,比如最近比较流行的DUILIB。它们的主要特征是:界面开发与逻辑控制相分离,用XML来配置界面,XML的一个节点一般就是一种控件,节点上的各个属性控制控件的各种特征,比如位置,图片等等。而用另外一种语言作为对界面元素处理的逻辑控制,比如XUL用脚本语言JavaScript,WPF,Silverlight用C#,DUILIB则直接用了C++。

这个阶段上,如果你要配置一个窗口可能只需要在XML(WPF和Silverlight是XAML)里声明一个元素,比如

<window x=”0” y=”0” width=”400” height=”300” background=”bg.png”></window>

类似于上面这样的一句简单描述,就完成了一个位于屏幕左上角(0,0)起始位置,宽度为400,高度为300,背景图片是bg.png的窗口的配置,注意这里说的是配置,而不是创建,因为创建需要在UI引擎解析完XML以后才会完成。



其实界面库的发展跟计算软硬件技术的发展有着很大关系,随着软件复用性的提高,UI元素的复用性也在不断提高。随着硬件技术的发展,更快的CPU,更大的内存,使得我们在做一些以前看上去效率比较低的处理界面的方式也具有相对良好的性能,但是又同时拥有了更好的灵活性。



现在的互联网客户端一般都会有自己的界面库,也有可能采用一些开源的界面库自己修改。据我说知QQ用的是自己开发的界面库,PPS用的是DUILIB,最近翻了一下新出的微信PC客户端,里面居然也有DUILIB的授权文件,因为界面库的开发算是客户端开发里相对比较有技术含量的东西,因而难度也相对大一点,能流行开的第四代C++界面库其实并不多,如果大家有兴趣可以自行研究。



第二篇就到这里,再往后我要介绍一下Windows界面开发的基础,就是GDI这个东西,还会简单介绍一下GDI的常见函数和使用方法,以及常见的坑。

多谢观赏!
...全文
4593 点赞 收藏 16
写回复
16 条回复
w_xxxbbb 2015年04月06日
引用 13 楼 wyx100 的回复:
[quote=引用 3 楼 weiym 的回复:] 现在搞Windows客户端开发的不多了, 呵呵 http://www.cppblog.com/weiym/archive/2014/07/26/207819.html
顶[/quote] 再顶。
回复 点赞
程序员鼓励师 2015年04月05日
回复 点赞
wyx100 2015年04月04日
引用 3 楼 weiym 的回复:
现在搞Windows客户端开发的不多了, 呵呵 http://www.cppblog.com/weiym/archive/2014/07/26/207819.html
回复 点赞
xiaocongzhi 2015年04月04日
回复 点赞
ccvoid_void 2015年04月03日
同顶。不过确实,MFC的好处在于学习起来资料多,学了MFC后,看别的界面库,瞬间方便很多了。缺点就是。。MFC的功能确实不太够了。 http://bbs.csdn.net/topics/391006529 之前上传的一个用WIN32,基于GDI的虚拟按钮的进制转换器DEMO,交流交流。
回复 点赞
oldmtn 2015年03月31日
不错,顶一个..一个WINDOWS程序员
回复 点赞
Eleven 2015年03月30日
感谢分享~~
回复 点赞
china_jeffery 2015年03月30日
介绍了不同领域所要用到技术会比较好
回复 点赞
洗洗睡去 2015年03月29日
引用 5 楼 lx624909677 的回复:
[quote=引用 1 楼 sunnyloves 的回复:] 1.mfc做的比较多,最近在看qt,的确像你说的,qt思路比mfc领先一代,简单的界面配置起来几乎可以不用懂c++,mfc应该是历史的包袱太多了,大象飞不起来了。 2.duilib似乎国内迅雷的blit做的很不错,还有我在csdn上看到的炫彩也还可以。不过他们的问题都是文档太少,真的做大型软件,可能开发起来没mfc效率高,毕竟mfc文档非常详细了。 3.建议整理成博客,帖子的话很快就找不到了 4.期待第三篇
QT除了帮助文档。有木有好的学习资料推荐下![/quote]惭愧了 我也就是学帮助文档的
回复 点赞
lx624909677 2015年03月29日
引用 1 楼 sunnyloves 的回复:
1.mfc做的比较多,最近在看qt,的确像你说的,qt思路比mfc领先一代,简单的界面配置起来几乎可以不用懂c++,mfc应该是历史的包袱太多了,大象飞不起来了。 2.duilib似乎国内迅雷的blit做的很不错,还有我在csdn上看到的炫彩也还可以。不过他们的问题都是文档太少,真的做大型软件,可能开发起来没mfc效率高,毕竟mfc文档非常详细了。 3.建议整理成博客,帖子的话很快就找不到了 4.期待第三篇
QT除了帮助文档。有木有好的学习资料推荐下!
回复 点赞
这不是鸭头 2015年03月28日
为什么不再继续写下去了?
回复 点赞
weiym 2015年02月14日
现在搞Windows客户端开发的不多了, 呵呵 http://www.cppblog.com/weiym/archive/2014/07/26/207819.html
回复 点赞
zhousitiaoda 2015年02月13日
迅雷的BOLT感觉也不怎么样,不开源,没文档(渣渣文档等于没有),做出来的效果感觉也不怎样。好用的影音软件UI倒是其次,别整一堆东西,广告满天飞,搜索个资源,点个按钮链接卡个几秒就行。
回复 点赞
洗洗睡去 2015年02月13日
1.mfc做的比较多,最近在看qt,的确像你说的,qt思路比mfc领先一代,简单的界面配置起来几乎可以不用懂c++,mfc应该是历史的包袱太多了,大象飞不起来了。 2.duilib似乎国内迅雷的blit做的很不错,还有我在csdn上看到的炫彩也还可以。不过他们的问题都是文档太少,真的做大型软件,可能开发起来没mfc效率高,毕竟mfc文档非常详细了。 3.建议整理成博客,帖子的话很快就找不到了 4.期待第三篇
回复 点赞
发动态
发帖子
非技术类
创建于2007-09-28

1478

社区成员

5.9w+

社区内容

VC/MFC 非技术类
社区公告
暂无公告