上一个教程对比的5个方向共7个界面框架,都是非常权威,应用很广泛的库,绝对是非常稳定,并且能够做出常见的界面出来,可以放心大胆的用在项目里。
但那7个界面框架再好,也总是没有绝对的优势,不然其他框架早就淘汰了,那么以下几个才是目前真正的顶级理想状态(过几年可能这些理想状态也不理想啦~):
1、用3D游戏的界面来做客户端界面,3D游戏的效果当然是世界顶级的啦,如果客户端能做成那样的效果,当然是非常爽,但其资源占用就决定了不可能用来做客户端。
那么我们退而求其次呢? 用2D的总行了吧? 其资源占用还是太大了!
那再退一步呢? 不需要动画效果和各种特效,只需客户端那样静态的页面。由于游戏框架做界面比客户端框架灵活N倍,这样就可以即有游戏框架的灵活性,又有客户端一样的低资源占用,岂不是客户端界面最好的组合? 嗯,技术方面可行,但是游戏框架本来就不是为客户端而生的,所以要调整成客户端框架,普通人只能小打小闹,做一个界面出来可以,但要做出通用的框架,难度就非常大了。 所以,如果没有大牛去提炼游戏框架,那么用游戏框架做客户端就是扯淡。
马云说过:如果一个点子有70%的人赞同,就说明这个点子已经被千万人想过了。 既然Alberl能想到这个,那肯定很多大牛已经做过这种事情了,Alberl也搜到过一些开源库,但不成气候,不然早就火了~
2、用.NET 和 Native C++,既然没有好用的游戏框架,那我们来点现实的吧,用WPF做界面,用C++做逻辑。
其实如上个教程所说,.NET已经被广泛应用了,很多领域根本无需Native。
在工业领域,比如考勤机、点菜机、KTV等领域,由于终端数量不多,都是由厂家直接安装软件,并且不需要很炫的效果,所以.NET的大小根本就不是问题,而运行也很快,因此在这些领域,那几个问题根本就可以忽略不计。
而在移动领域,之前微软的WinCE、WinMobile都是用C#做界面,非常方便。现在的WP8也是用C# + SilverLight,根本就不支持C++开发,所以更不用谈Native C++了。而android最开始也不支持C++,所以现在真的不是C++一统天下了,就别想着什么事都用C++来搞定了,语言真的只是个工具而已。
那么转向我们的客户端领域吧,上面已经说了,在非客户端领域,要么对界面要求不高,要么已有其他框架代替,真的不用蛋疼界面,只有客户端这个领域才是上不上下不下的。即使对于客户端,.NET除了要装.NET库以及慢点,其他方便真的是目前最好的了,91手机助手已经开了先河啦。但是现在这么多客户端在用C++,咱们还是得用C++做界面吧,那就还是不方便吧。
那么我们不用WPF的特效,只用静态效果,就不会感觉到慢了吧,只需要低版本的.NET库就行了,也就是几十M,并且只需要在XP下装。不过如上个教程所说,除了.NET大以外,更重要的是程序员的水平,即使是C++的高手,全部切换过去做.NET,也不见得能搞得好,所以.NET还是不能用,C++为啥就这么蛋疼呢o(╯□╰)o 但是微软提供了一种折中的方案:用C++的语法,用.NET的功能,即CLR。 这虽然离【.NET 和 Native C++ 】差一点,但好歹也是【.NET 和 C++ 】吧,这不就解决了刚刚的语言切换的问题吗? 那看来就只剩下几十M .NET库的问题啦,这听起来很不错,也确实能用将MFC的项目快速转换到.NET,这样老项目很快就可以用上.NET做漂亮界面啦。不过Alberl依旧相信一个道理:不管宣传得有多好,时间才是检验真理的唯一标准。显然,CLR出来很久了,没有被广泛运用起来。Alberl也说不出为什么,但Alberl会说:为什么这么久了,你还没火起来?
可能有小伙伴想说了,以微软的实力,做一个用Native C++写逻辑,用.NET做界面,并且无需安装.NET库的框架出来,应该易如反掌吧? 那确实^_^
如上所述,你能想到的,早就有人去做啦,有人就去微软的VC++版块提意见,问为什么不出个NativeWPF,即使不用C++,也很好呀。那我们就真的不用蛋疼客户端啦,屌爆了!!! 不过不要高兴,也不要期待微软会这么干。 VC++官方团队早就否定了这个意见,虽然没有说是公司的战略问题,但其实真的是微软的战略问题。C++好歹是别人的孩子,谁会丢下自己的亲儿子呢~ 从C#的功能来看,可以发现微软早十年就开始布局各大终端了,微软的目标就是一统天下,你干什么都用.NET就行啦。并且目前仍在继续,很多先进的NB功能都是只在C#里,C++只有仰望的份。 而WP8不支持C++开发,也让很多人转向了C#,总之,C++开发者越来越少,C#越来越多,那么微软一统天下的目标就更近啦。 可惜近几年被linux抢尽了风头,android已经严重威胁了微软,移动端的崛起已经让微软高度焦虑了。不说了,再说Alberl就有点担心客户端的命运了o(╯□╰)o 在其位谋其政,即使客户端未来可能会消亡,Alberl还是那句话,移动端还是需要一个漫长的发展,十年内还是不能完全代替客户端的,啥时不用PC敲代码了,才是终结的时候。 最重要的是,你十年的时间里只学习客户端? Alberl可没这个打算,Alberl非常想学习各种知识,并且移动端的开发已经被安排在几年后的日程里了,所以Alberl从不担心MFC什么时候被淘汰,也不担心C++什么时候被淘汰。
扯到哪里去了?哎,微软不愿意做NativeWPF,但C++的界面好歹也是要做的吧,方案总是要有的吧。那确实,很多大牛已经做了,还是那句话,必须有大牛的无私奉献,否则一切都是扯淡。这个将在后面的教程介绍~
国内用WPF最著名的就是QQ概念版了,并且效果非常炫,但QQ概念版早就停止了开发,也许并不仅仅是因为界面,但可以知道的是:如果从零开始用.NET开发出一个QQ,无论是界面方面,还是逻辑方面,都要花费巨大的代价!
3、用Web界面来做客户端界面,既然NativeWPF也没有非常权威的框架,那我们再现实一点吧,用Web做界面,这个可是有很多著名框架的哟。
虽然前面两个方案做界面都是很nice的事情,但是没有知名的框架,对于我等菜鸟,目前是不可能去开发一个框架了,所以我们再退一步吧,虽然HTML的界面效果有很多限制,但是已经能满足绝大部分客户端需求了,并且其方便程度简直令小伙伴们惊呆了。但是总有人站出来说:又是几十M的库。好吧,Alberl觉得如果不大于40M,应该不用太在意吧,如果小于20M,那真的可以忽略啦。
不过Web框架除了库的大小,真的有致命的缺点:
1、界面效果有限制,虽然HTML5可以解决这个问题,但是木有知名的框架。所以如果对界面要求不是特别高,只是想比普通客户端好看一点,用Web还是不错的。
2、跟JS交互搞死人,这个Alberl没有去做过,但是听朋友以及网上的大牛说,绝对可以搞死人。 不过有现成的框架在,这个也不用太担心啦。 但是如果没有验证好就贸然去用,后面如果实现不了某些功能,那就悲剧了。 所以推荐先验证一下某些重点功能能否实现,再做选择。
3、速度很慢。 这个倒可以忽略了,因为现有框架已经解决了这个问题。
其中WebQQ也可以说是Web界面的顶峰了,上面有一整套QQ的产品,比如QQ客户端、QQ音乐、QQ飞车等一系列产品,整个WebQQ简直就是一个OS。但是光看WebQQ的桌面背景还好,如果一打开QQ客户端,或者QQ音乐、QQ飞车,那肯定会让你失望的。其实失望的不是界面效果,而是比较,因为界面效果确实很炫,比起很多客户端都好,但如果和PC上的QQ音乐、QQ飞车比起来,那真是失望了。所以Web界面的效果真的不是那么NB。
好啦,三种做客户端的界面方法都介绍啦,第一种方法最好,但没有知名的框架;第二种其次,并且有一些框架,但离知名才差得远; 第3种最差,但已经有很多知名的开源库啦。后面的教程会一一介绍。虽然这三种方法看起来都比上一个教程中的7个框架方便,但实际上还有很多需要完善的地方。
不得不说的是,其中WebQQ可以说是Web界面的顶峰,而QQ概念版可以说是.NET的顶峰,而QQ正式版是VC++的顶峰。所以QQ已经花了巨大财力、人力、时间去研究了几乎所有方式的界面,重要的是都付诸行动,并且达到了顶峰,TX真的很强大!
所以Alberl在这里做一个总结:
1、你能想到的,别人已经做了;你能做的,别人已经做到顶峰了;你醒悟时,别人早就成功了。
2、没有大牛无私奉献,任何方式都是扯淡。
3、如果不是专业人士,就不要重复造轮子了,看看巨头们都干了啥!
而Alberl不是大牛,所以无法去做一套框架;也不是专业人士,所以无法去利用现有成果重复造轮子;Alberl只是个小小菜鸟,什么好用就用什么,就算没有满意的,也只能选一个不满意的框架啦。下一个教程将介绍Alberl怎么在不满意的框架中选一个满意的~O(∩_∩)O~
- 仿迅雷播放器教程 -- duilib界面(13)
经过了这么多篇文章的讲解,相信大家也对界面库有一定了解了,用一个新的界面库,肯定要对它进行全方位考察.鉴于公司目前所有的产品都是MFC做的,全部转换成duilib肯定不现实,并且公司的很多项目逻辑和界 ...
- 仿迅雷播放器教程 -- C++ windows界面库对比(11)
从上一篇文章中可以看出,C++的界面方向还很弱,没有任何一个界面库可以一统天下,所以才造成了界面库百家争鸣的情况. 从时间上看: 1.出来最早的是QT,1991年就有了. 2.VC++ 虽然1992年 ...
- 仿迅雷播放器教程 -- 基于VLC的MFC播放器 (6)
代码下载:http://download.csdn.net/detail/qq316293804/6409417 昨天的教程里写着预计MFC播放器会隔得久一点,但是今晚仔细看了下VLC的常 ...
- 仿迅雷播放器教程 -- 提取exe资源(12)
既然选择了一个界面库,那么咱们就开始吧! 既然是仿迅雷播放器,那当然要把迅雷播放器的资源提取出来啦,但是很多小伙伴可能不知道怎么提取,所以这里就教大家一些方法: 一.传统的资源提取器 ...
- 仿迅雷播放器教程 -- C++ 100款开源界面库 (10)
(声明:Alberl以后说到开源库,一般都是指著名的.或者不著名但维护至少3年以上的.那些把代码一扔就没下文的,Alberl不称之为开源库,只称为开源代码.这里并不是贬低,像Alberl前面那个系 ...
- 仿迅雷播放器教程 -- 封装VLC (5)
虽然上个教程中10多行代码便做出了一个播放器,但如果加上快进快退等功能的话,代码都会挤在一团,阅读性很差,所以这个版本将对VLC进行封装,由于第一个教程已经进行了ffmpeg的封装,所以这里将 ...
- 仿迅雷播放器教程 -- 基于ffmpeg的C++播放器 (1)
2011年12月份的时候发了这篇博客 http://blog.csdn.net/qq316293804/article/details/7107049 ,博文最后说会开源一个播放器,没想到快两年了,才 ...
- 仿迅雷播放器教程 -- 十年经验大牛对MFC的认识 (7)
由于上一个教程做界面用的是MFC,所以这里不得不说一下MFC的历史,请看正文: 原文链接:http://blog.csdn.net/sunhui/article/details/319551 作者 ...
- 仿迅雷播放器教程 -- 基于VLC的C++播放器 (4)
经过前面的介绍,想必大家对VLC和ffmpeg都有一定印象了,还记得学习ffmpeg多么蛋疼吗?那么VLC会不会也这么蛋疼呢? 那么我们来看一段官方的Demo,Alberl精简了Demo,只留 ...
随机推荐
- failed to load class "org.sl4j.impl.StaticLoggerBinder"
(1)要确保有properties文件在你的主项目的src下面 (2)https://www.slf4j.org/codes.html(这个是配置相关文件) (3)如果经过1.2步后问题依然存在,那么 ...
- Qt 4.6.2静态编译
一.下载mingw 4.4.0:ftp://ftp.trolltech.com/misc/MinGW-gcc440_1.zip 二.解压到C:\mingw目录下,设置环境变量path将C:\mingw ...
- 用Jersey构建RESTful服务1--HelloWorld
一.环境1.Eclipse Juno R22. Tomcat 73. Jersey 2.7 下载地址( https://jersey.java.net/download.html) 二.流程1.Ec ...
- ADC分类及参数
ADC分类 直接转换模拟数字转换器(Direct-conversion ADC),或称Flash模拟数字转换器(Flash ADC) 循续渐近式模拟数字转换器(Successive approxima ...
- maven学习二(dependencies)
在前面一篇文章maven学习一(HelloWorld工程)已经对maven有了基本介绍,本文开始介绍maven依赖,通过如何如何增加log4j来学习maven的dependencies no-depe ...
- C++中extern “C”含义及extern、static关键字浅析
https://blog.csdn.net/bzhxuexi/article/details/31782445 1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C ...
- 使用别名访问MSSQL Express
当MSSQL Express安装成功后,默认只能用 .\sqlexpress 或者 (local)\sqlexpress 有时候我们希望使用(local) 就可以访问,此时就可以利用别名 1.MSSQ ...
- iOS:用Block写一个链式编程
一.介绍 链式编程是一个比较新颖的编程方式,简单直观,用起来也比较舒服.目前比较有名的Mansory和BabyBlueTooth就是使用链式编程写的第三方框架. 二.写法 链式编程写法不同于传统方式, ...
- IntentService 服务 工作线程 stopself MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 使用SpringBoot配置了 server.servlet.path后无效的解决方案
一.问题描述 使用SpringBoot配置了 server.servlet.path后无效,访问时无法通过:http://127.0.0.1:8080/app/hello.html 访问. 二.解决方 ...