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的常见函数和使用方法,以及常见的坑。

多谢观赏!

Windows客户端开发简介(二)相关推荐

  1. Windows客户端开发简介(一)

    在这样一个移动当道的年代,我跟大家讨论Windows客户端开发,似乎有些倚老卖老的意思了.然而我却觉得无论什么时候,Windows客户端开发其实还是有着不少实用经典的技术的.对了,确切说我是要说说Wi ...

  2. windows客户端开发--也许是一条不归路

    如今的Windows客户端开发,已经被同行嘲笑为鸡肋,甚至有些人认识做Windows客户端就是一个笑柄. 食之无味,弃之可惜. 不可否认,PC端没落的很快. 但是想说的是,任何一门技术都有存在的道理. ...

  3. Windows客户端开发--获取系统mac地址(使用WMI)

    之前写过两篇博客,介绍了windows的WMI技术,以及如果通过WMI获取显卡详细信息: Windows客户端开发–WMI技术介绍 Windows客户端开发–使用WMI获取显卡详细信息(win32控制 ...

  4. 给windows客户端开发新人的一点建议

    转载链接:http://blog.csdn.net/wininternal/article/details/7604099 看到论坛上很多新人想从事windows开发,却不知从何学起,本ID是过来人, ...

  5. Windows Phone开发(二)-- 框架结构和启动过程

    一 Windows Phone 框架结构 在进行Windows Phone开发之前有必要了解一下整个全新平台的结构.对于Windows Phone平台来说,区别于之前的Windows Mobile平台 ...

  6. windows客户端开发--使用json11解析json

    类似xml,JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. json11是适用于c++11的一个轻量级的库,用于解析json. 什么是json? JSO ...

  7. Windows移动开发(二)——闭关修炼

    一些武侠小说里的大人物,为了争夺武林盟主,号召天下,经常闭关修炼一段时间,闭关期间只能接触送饭的人,并且关外还有很多守卫的人员.还有,无论是篮球还是足球运动员,他们在真正接触球之前,都必须做很长一段时 ...

  8. windows客户端开发--根据可下载url另存为文件(微信windows客户端这样做的)

    可以我的blog的标题会让你误解,那么好,没图说了xx: 比如微信windows客户端发送了一张图片,我们可以预览这张图片,还可以保存到本地: 那么windows程序是如何下载这张图片的呢? 是这样, ...

  9. windows客户端开发--windows api大全

    网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同一个网络资源的 ...

最新文章

  1. 利用HTML5 Canvas和Javascript实现的蚁群算法求解TSP问题演示
  2. Scala函数的调用
  3. python中字典和集合的区别_Python中字典和集合学习小结
  4. C#使用七牛云存储上传下载文件、自定义回调
  5. 正则获取前8位数字_数据取整,获取字符串前数字另辟蹊径之LOOKUP
  6. Mybatis3 最简例子
  7. 刷BOIS的要点方法
  8. java反射的优缺点_Java反射机制的优缺点
  9. BLE MESH----Mesh beacons
  10. 微信小程序开发时,下载node.js安装后出错误怎么办
  11. 反爬虫原理与绕过实战
  12. 谷歌404页面html,简洁404页面HTML好看的404错误页源码
  13. matlab程序vpa用处,Matlab 提高精度 vpa
  14. ElasticSearch 学习笔记
  15. MySQL--查询操作
  16. cam 350 /DFMSTREAM v12.1使用
  17. 坚强吧,人生还很漫长
  18. redux入门基础一
  19. 简论智能物流系统的四大元素 -- 仓储, 物流, 交通, 驾驶
  20. RK3399平台开发系列讲解(低功耗篇)11.1、wakeup events framework

热门文章

  1. C# 连接 SqlServer 数据库
  2. Android framework学习
  3. 支付宝APP支付 ALIN10146-自查方案
  4. 你笑,我就告诉你我在想什么
  5. 文具店别样的玩法,利用“一张海报”做到年赚95万,方法值得借鉴
  6. 在国内怎么玩LOL韩服呢?
  7. 前端canvas动效实战,PIXI+GSAP仿写vanmoof刹车动效 | 猿创营
  8. 详细解说关系型数据库
  9. 传染病传播模型(含matlab代码)
  10. nefu 117 素数个数的位数 (素数定理)