之前的文章里提到过,c++的第三方库非常丰富,而且不乏一些高质量开源库。这些第三方库为我们开发提供了非常大的便利,极大提高了开发效率,也降低了维护难度。这几天就按照分类介绍下常用C++第三方库。就从UI库说起吧。
First:MFC库
MFC(微软基础类库)是一个微软公司提供的类库(class libraries),准确的说,MFC不仅仅提供了一套UI,还包含一个应用程序框架,可以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。MFC是一个相当“老”的类库,至少已经有十几年的历史了,版本也更新了十几个,算是软件开发中的“常青树”(其实,主要是跟随windows发布,每一版本windows都有对应的MFC库)。虽然更新了这么多版本,但是具体的使用的流程倒是变化不大,所以学校MFC的话没必要学习指定的版本。掌握了一个版本后,其他版本的使用也不是问题。
总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。Microsoft Visual C++提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。
MFC原生的UI元素虽然谈不上非常漂亮,但是也不是特别丑,基本上算是中规中矩。所以,很多人基于MFC制作了许多第三方库,比如duilib。当然,也有第三方公司开发的收费的UI库,比如BCG。这些第三方库UI库确实比原生UI漂亮些(看颜值得时代啊)。
Second:Qt库
Qt库在前面的文章已经提到了多次了,它的IDE也就是Qt Creator。不过,Qt也提供了VS的插件以及其他IDE的插件,具体的大家可到Qt官方网站下载(Qt 其实还有一个商业版本,在国内,大家用的开源版本比较多)。
使用QT开发标准GUI界面,开发效率相当比较高。因为现在的QT库比以前的庞大很多,而且QT的许多机制比MFC先进很多。如果认为QT仅仅是一个跨平台界面库,那就小看它了。准确的说,它不但是一个通用的跨平台的面向对象的应用程序接口库(包括GUI、数据库、网络、多线程、XML、数据容器和算法等,常用的编程资源都有封装,就是说,这些都可以跨平台,而不仅仅是界面),更是一种C++语言的扩展,一种编程平台和应用程序框架。信号和槽的机制简化了对象之间的通信,比消息映射直观多了;界面的布局管理机制使开发人员可以很轻松地编出优雅的窗体;界面语言翻译机制也很方便实用;QObject容器管理可以看到Qt在内存管理方面的努力;扩展的foreach循环结构也向现代语言靠拢;QT在界面层多封装了一层QStyle,开发者甚至可以使用QSS定制出一套界面来……如果仅仅是开发标准的GUI(使用通用的控件),开发效率会很高,接近于.NET窗口编程。
欣赏下Qt开发的漂亮的界面。
基于Qt的扩展库也不少,比如Qwt、node-qt、Qt3D。Qt本身就支持以插件的形式扩充,所以Qt的扩展库比较丰富也就不足为奇了。
Third:wxWidgets库
wxWidgets是一个Open Source的跨平台C++ GUI framework,采用LGPL协议, 用它开发的商用软件,不需要开放源代码,光这一点,就可以吸引无数的眼球,这种好人不好找。
wxWidgets最初叫wxWindows,后来迫于压力不得不改头换面,从新做人。不过在Windows这个单词泛滥的年代,widgets反而显得特别一些, 加上w(代表Windows)x(代表X),顾名思义,个人认为比原来的名字要好得多。当然wxWidgets并不仅仅是窗口的小部件,除了UI, 还有HTML的显示和打印,虚拟的文件系统,OLE、OpenGL支持,以及jpeg和xml,还有很多其它东东。 感觉上在windows下wxWidgets就是一个mfc的替代品,而实际上它的windows版本也的确曾经依赖过mfc,后来在borland c++用户的强列要求下,才用win32重写了一遍。除了windows之外,它还支持Unix/Linux、MacOS、OS/2、PalmOS等等。在不同的平台下,它停供的接口都几乎一样,所以在一个平台编写的程序,可以不经修改或者很少修改就能移植到另一个它所支持的平台上。加上它保证尽可能使用平台本地的窗口控件,所以和平台独立的编译语言编写的程序有一致的外观。
wxWidget最大的优势就是无论对于个人还是对于商业应用都是免费的!它的主体框架的授权协议支持商业免费应用,其外围功能库中很多也是lgpl授权的,这无疑对于我等”0资本”的人来说是天大的好事。不同于Qt之类的跨平台gui库(需要开放源代码)。Code::Block采用wxWidget作为UI库。
Fourth:DX/OpenGl界面库
基于Dx或者OpenG的界面库是近几年兴起的一种UI,这种库做出的程序透明效果非常好,颜色也比较“亮眼”,很有特色。很多都是个人写的,代码托管在git或CSDN上,也有一些大公司开放出来的源码。简单介绍几个。
1、 MangoGUI:MangoGUI是猫仔在DXUT基础上修改得来的一个开源GUI系统。目前来说基本上继承了DXUT里面绝大多数的功能和改进了使用方式,让DX学习爱好者更容易去使用GUI系统。
2、 bolt 迅雷7界面引擎:迅雷界面引擎,这个用过迅雷下载和迅雷看看的就有体会了,界面的确是做的非常的赞。而且流畅,CPU占用和内存各种都很棒。采用了脚本交互的方式,脚本语言采用了Lua.可惜的是迅雷只开放了接口SDK给个人使用。
3、 clayui:clayui是一个采用纯C++编写的界面框架,可以很方便的移植到各种系统上。现在支持的系统包括Android,windows,wince,Linux。clayui的特点是能实现各种2D,3D动画,一些WPF,FLEX才能实现的界面效果,通过clayui可以很方便的实现。 clayui的底层渲染支持纯软件渲染,d3d,opengl es硬件加速渲染,您可以根据自身的需求选择合适的渲染方式,使您界面的用户体验达到最佳效果。
还有很多其他的第三方库,相对来说比较小众一些。
评论0