转: 关于UI开发(总结一些技术和一些论坛牛人讨论)

1,MFChtml

基于VC6.0的微软基础库编程

2,WPFwindows

作绚丽界面一概用WPF,作通常绚丽界面用WinForm,作windows标准界面用MFC 浏览器

WPF也有个致命缺点,就是要.net framework支持 安全

3,DirectUI网络

Windowsless或者Handleless,也就是无句柄窗口架构

4,迅雷界面引擎框架

http://xldoc.xl7.xunlei.com/ less

迅雷7应用开发在线文档ide

Thunder7

XAP

界面引擎

迅雷下载开放引擎

迅雷基础库

5,网上讨论

///////////////////////////////////////////////////

(1)windowless或者称handleless,也就是无句柄窗口,在设计和实现的时候,每一个控件都本身实现,最后画到父窗口中。另外一个伪windowless是用标准mfc控件,而后经过hook或其它远程线程注入等技术,让spy++等软件,看不到窗口句柄。这主要是为了防止盗号木马经过edit窗口句柄,盗取用户名和密码。 

(2)windowless 或 handleless 或 DirectUI 技术,将首选 WGI !WGI 后生可畏,将是永远的经典! http://code.google.com/p/oic-wgi/downloads/list 基于C语言

(3)qq和msn都是windowless方式 

(4)windowless技术并非适用全部的软件界面。这一点还须要开发者自已分清楚。

就目前来说windowless比较适用于基于对话框的应用程序。 

(5)DirectUI是目前windows平台上最流行的一种无窗口界面技术
显然是最不流行的技术,使用无句柄方式的软件,只是百里挑一。
全部控件都是虚拟控件没有实际窗口,所以效率更高,更安全。
这个有什么必然联系吗?为何效率会高呢?安全性更是无从谈起呀。用windowless就安全?

国内流行的QQ/MSN/迅雷等都采用此种技术
这个说对了。可是,msn虽然没有窗口句柄,可是有另外一种句柄,为此,软件还作了相似spy++的工具来得到这个句柄 

(6)界面开发主要解决的问题是:如何把美工的创意,更方便的用代码实现。或者,界面开发技术限制了哪些美术创意的实现? 

(7)感受windowless,DirectUI这种技术,只有这种大公司才有能力搞。
据说QQ 搞这个东西都搞了快5年了,开发投入超千万。

感受这种东西要作出通用的太难了
你看QQ的全部软件,也不是全部的软件都是这种windowless的。
微软的就不用说了,在msn,xp里面有些部分应用。

我猜想他们作的这个东西,虽然能够用了,但内部没有所有推广使用。缘由多是还不够通用,还不够成熟。

(8)微软是由于内部太多界面库了。各个部门各用各的。

QQ这种,纯粹是为了本身产品服务的,人家也不会卖本身的库,因此不须要通用。自已的产品须要什么控件,就往库里开发什么控件。 

(9)windowless做为一种新的界面技术,固然要从新实现Win32界面原来的提供的机制了,
窗口的剪裁、激活、绘制、消息循环,每个新的界面机制都要本身实现这些东西的,
这怎么算致命的缺点呢?

我我的仍是很喜欢windowless的界面机制的,很是自由,开发者能够天马行空的实现本身的想法创意,
传统的win32架构界面开发总有种带着镣铐跳舞的感受。 

(10)windowless能够增长破解外挂的难度,也就是增长了破解的门槛,不是随便会弄个对话框程序就能够破解,但仍是不能根本解决问题,QQ登陆密码,同样能够拿到。 

(11)wpf慢死你~学那么多技术干吗,学好win32就能够了。wpf过几年没了,就出来了fpw了 

(12)从CWnd直接派生,也能够天马行空的实现本身的想法创意。而且在实现创意是,不用考虑另人头痛的剪裁、焦点、消息循环等等与界面不相关的东东。 

(13)wpf与我讨论的windowless不是一个概念。
我说的windowless,是指我们普通人或通常公司开发的。wpf也是windowless,固然不致命,也不是缺点了。而且大部分界面编程的人,都应该学学的。你学习一个小公司内部的windowless产品,说句很差听的,跳槽也很差找工做,固然,若是你是这个windowless产品的设计者,那你仍是很吃香的。wpf虽然已经诞生不少年了,但国内到如今依然没有普及,那是由于xp如今还占据大部分人的桌面,学习wpf,会有更多工做机会。我考查了部分windowless产品,包括号称轻量化wpf的windowless的产品,离wpf相去甚远,wpf中的数据绑定、布局、资源、事件、动画、3D等等核心或非核心技术,通通没有。 

(14)其实楼主说了这么多,无非就是一点:“windows作完这一整套东西已是至关大的工做量,你们再从新开发彻底得不偿失并且难以达到Windows gui的稳定性”。
  但在看来,Windows那套框架因为开发的年代过久,不少概念太落后了。各类元素的复用性太差。这点和swing对比就知道。因此本身开发Windowless的好处就是锻炼本身的构架能力。
  不过我仍是比较赞成楼主的观点。要想写成Windows那么稳定的gui,要至关大的耐心和工做量。
  而楼主赞同wpf,我不敢苟同,具体可见:http://topic.csdn.net/u/20110125/14/4702420d-8d03-46cb-99a7-8001771e2127.html?62503  
里面有段话很经典:“第五个问题是慢,惊人的慢。你们能够看看“飞信”,这是一个微软控主导决策的,嗯,使用.net 2.0。为了解决程序发布的问题,专门弄了个微型的.net框架,可是你将它与QQ比,是否是以为慢得太多?持续多年之后,移动的先生们不耐烦了,才有的如今的基于C++的原生版本,请比较一下速度。这里特别提醒一下,飞信的开发,是中国移动投入巨资、获得微软中国整个团队无微不至的支持的,这些高人甚至赤膊上阵亲自动手,这样使用他们的开发工具,历时数年也不过是作出一个被淘汰的产品。先生,请掂量一下,你比他们这些家伙更厉害吗?你比孩子的母亲对孩子更了解吗?” 

(15)若是须要文档/视图的话,仍是用mfc好了,如今mfc很漂亮了,像office2007。
vs2010貌似wpf作的,恩 确实佩服。
不知道office2010是怎么作的。

紧跟大公司新技术吧,要不就找个认为设计的好的开源项目,一直用、一直改。不过跟着大公司走仍是最好的选择吧 

(16)丢一个这东西出来好了。
http://www.viksoe.dk/code/windowless1.htm
虽然这东西的模型设计的我不太喜欢,不过绝对是学习的好材料。并且自己也很是美观,这是gdi作的windowsless。 

(17)我其实把mfc和windowless都归到win32技术体系的,实现上windowless也是用mfc开发,只不过不使用它默认的CButton等这些控件,仍然使用GDI或GDI+等技术来绘制。正如你说的,这个体系有点久远,因此微软设计了wpf,来逐步代替win32。到目前为止wpf仍是不成功的。但我坚信,早晚一天会成功的。wpf开发的产品,体积又大,运行速度又慢,是制约它发展的最大瓶颈。不过vs2010采用wpf开发后,发现,像vs2010这么大规则的项目,其实运行速度已经很快了,不比vs2008差多少。或许microsoft作过优化? 

(18)到讨论成这样了,那gtk,qt这类的怎么活啊.

我也抛一个出来,娱乐一下
Nana C++ Library
http://stdex.sourceforge.net 

(19)嘿嘿, 我喜欢GTK。 见到看到一篇文:Qt vs GTK

另外, VS2010中,MFC已经作了大量的扩充,能够作出漂亮的界面的 

(20)若是非要用Direct UI作项目,从研发成本考虑,还不如直接花钱买一套UI库,我看这个公司的就不错:http://www.directui.com/,全部的控件所有用接口的形式访问。 

(21)对微软来讲,作一个NATIVE-WPF易如反掌。蒋晟大大也说过,微软内部也讨论过这个问题,不过最终放弃了。这个能够理解,WPF是.NET的杀手锏,若是把这个杀手锏转交给非托管语言,对.NET战略是致命的。我还真想知道,若是没有WPF,还有多少人会选择.NET。讨论这个没有意义。

仍是回到windowless吧。近几年不少人关注DirectUI/Windowless,殊不知DirectUI为什么物。我曾经在某个帖子里面作过比喻:DirectUI = Window + Windowless,全部在屏幕上显示的东西都是DirectUI方式,3D是,浏览器是,连普通窗口也是,你们都在显存的同一块区域显示全部内容,哪里分什么有窗口无窗口。为何要把窗口分红有句柄和无句柄呢?由于微软的有句柄窗口是工业标准,操做方式有章可循,窗口API你们耳熟能详,家家户户都用没有锁的门窗,全部人都知道该怎么操做窗口,偷鸡摸狗的人固然也知道,因此第一个问题就是标准带来了更高的安全风险,因而乎不少人开始但愿在自家门窗上加一把锁,并且只有本身有钥匙。最先加锁的人仍是微软本身,MSN要保护用户隐私,搞了个DirectUIHWND,被人发现后,DirectUI这个名称就逐渐扩散开来,也有愈来愈多的软件给本身的窗口加了锁。从这个时候起,DirectUI = Windowless,就是为了跟不安全的有句柄窗口区别开来。DirectUI 的另外一层含义就是隐秘、非标准,这个概念会在用户内心生根,一旦有哪家的所谓 DirectUI 窗口由于流行而不幸成为另外一个标准,它绝对会被人们踢出 DirectUI 阵营,结局跟有句柄窗口没什么两样,就由于太标准而失去了隐秘的特性。也正是由于隐秘、非标准的特性,多少人削尖脑壳想找到 DirectUI 框架、类库、标准,结果是找不到的,由于没有标准。反过来讲,只要不是标准的,均可以叫作 DirectUI,人人均可以自诩个人窗口是 DirectUI,其实不用夸,原本就是,夸多了会误导更多人。

固然,Windowless 不只仅是为了安全,在能力上天然也有本身的过人之处,这些能力就交给楼主来总结吧,我只举个最小的例子:若是想让一个窗口的某个子控件藏在背景贴图的后面,普通窗口是办不到的,对Windowless来讲垂手可得。 

(22)你忽视了handless一个最大的好处,就是无闪烁绘图,使用思想老旧的win32控件是很难作到毫无闪烁的。

p.s 如今腾讯全系列产品都是DirectUI。能够看到,它全部窗口的类名是TXGuiFoundation,它的目的很明显就是想成为腾讯的MFC(Microsoft Foundation Classes)。 

(23)duilib 库不错,是开源的。。如今正在发展。但愿各位能够参与
www.duilib.org 

(24)这个和闪烁没有任何关系。win32方式,能够作的一点闪烁也没有。windowless,若是作很差,也是很是闪的。另外,所我了解,DirectUI是有copyright的,是个公司的产品名,不能随便叫。

腾讯公司使用这种无窗口方式,一是为了防止第三方外挂。人家本身开发本身用,固然一点问题没有。某我的离职了,还会有新来的人开发,不用担忧出了问题没人管。 

(25)楼主洋洋洒洒写了这么多,从你列举的诸多缺点里面我能够看出你的水平,你最多只是了解一些MFC,你可知除了MFC框架还有不少,并且更加优秀。
其余的不讨论,我就把你所说的缺点一条一条的给你反驳吧

1:无窗口句柄只是内部的显示控件没有句柄,对这些控件的显示与否彻底能够经过 一个Show方法从新进行封装,并且可控性更强
  每一个控件也一样有本身的坐标属性,好比Top,Left 来进行移动!

2:消息历来没有做废,每一个控件也一样有本身的消息处理函数,只是咱们在窗体消息循环里面把须要的消息派发给这些自定义控件就能够了

关于以上两点你能够了解一下VCL,能够说用Delphi随便拖几个控件(从TGraphicControl继承)上去就是一个 Windowless界面了。有时你甚至感受不出来
这些TGraphicControl控件和不一样的标准控件有什么不一样。

3:若是你的程序写好了,更换界面须要花费的时间比开发时间还长,只能说这个软件架构就是一坨屎!连最简单的逻辑和界面分离都没有把握好?

4:你用过别人开发的windowless控件吗? 学习更多地东西会影响你的职业生涯吗?  

5:软件的稳定和可靠性彻底不是界面的事! 你仍是先分清界面和逻辑功能的不一样吧。

6:仍是架构问题!功能层代码应该彻底和界面分离,若是你采用发送消息就已是把功能和界面绑死了! 为何不把界面设计成实现一个接口,好比有Update()
  方法,无论界面采用何种方式,只要实现了接口中的Update方法就能够了。  

7:这些都有成熟的机制,裁剪和坐标变化就两个函数,绘制若是想要漂亮的界面无论你采用什么方法,都要绘制的。

8: 按你这条的意思在C#,JAVA刚出来的时候我也能够这样说:全球几乎全部的软件都是使用C,C++开发的.......。
  Windowless也是一种思想,wpf只不过是这种思想的一种实现罢了。

9:后期汉化..对这条:配置文件!你不是用过ini,xml吗? 对多语言的支持不只仅是翻译一下,界面也要进行调节,
  你就是采用标准的win32控件不也要配置? 后面的运行去其余程序发来的标准消息,这个需求我不懂何时要用到: 给木马病毒留的后门?

10:这条才是你真是水平! 文档/视图不是MFC的专利,这是一种架构思想,若是脱离了MFC就不能使用文档/视图架构只能说
  你就是一个填代码的苦力。 那我又问你: 大家项目采用Wpf,里面也没有文档/视图架构啊! 你不快终结项目,继续MFC。。。

 你眼中这些技术仅仅是表面的技术,彻底没有看到各类架构,各类设计的本质思想,因此你不会熟练运用它们,最后只会调用现成的方法!
 我最后总结:你仅仅是弄了几年界面,抢了美工的活! 

///////////////////////////////////////////////////

(1)DirectUI是一种技术简称,也叫windowless,不要被忽悠了。
国内作DirectUI的公司不少,有bodsoft,uieasy,uipower。
还有开源的duilib,那个uipower只是占了个directui的域名而已。

建议考虑迅雷7的界面引擎,目前已经开放了,均可以用。
文档各方面会不断完善,有兴趣可加QQ群:62552336
http://xldoc.xl7.xunlei.com/0000000018/index.html 

(2)迅雷7用DirectUI作出的效果就很漂亮。 

(3)若是你们有兴趣,能够看看SKINSE界面库。至于SKINSE到底怎么用?我相信下载看过的人会明白!!!
http://www.skinse.com/ 

(4)DirectUI作出的界面效果还能够,不过自身也要有过硬的技术作基础。
楼主能够借鉴一下qq的界面,貌似qq从2007开始就一直在用DirectUI作界面。不过真实性无从考证。 

(5)虽然DirectUI开发界面的效果不错,可是目前国内用DirectUI和懂DirectUI的人并很少。 

(6)若是MFC足够好用,可能会有那么多UI库吗?说句很差听的,若是不是VC捆绑MFC,还会有多少人用不三不四的垃圾MFC! 

///////////////////////////////////////////////////

(1)今年开始玩DirectUI,参考老外的程序,写了个DirectUI的Demo, 支持各类Layout,实现了各类基本控件(SplitBar, PictureBox, Button, Radio, CheckBox, Label, HyperLink, ProgressBar, trackBar, ListBox, Edit, ComboBox, Tab Control, Toolbar, Menu, tree),支持键盘导航,支持Tooltip,支持多语言,支持换肤,支持异形窗口,支持插件2次开发,支持Alpha通道,支持各类图像处理。

而后最近开始学WPF,学后本身的程序就不想再写了,感受再写基于GDI的DirectUI已经没多少意义,基本上QQ的UI已经是基于GDI的DirectUI的极致了。

感受理想的DirectUI设计上能够仿WPF,底层Render方式能够切换(Direct3D, OpenGL, GDI), 支持脚本,而且跨平台,应用程序和游戏均可以用,如今我还没找到这么一套东西,不知你们对DirectUI怎么看?

Demo下载:http://download.csdn.net/detail/weiym/3698407 

(2)要是支持那么多功能话,那得多大,这种界面库以尽可能轻量级比较好,不然和WPF又有什么区别呢。
你要想那样的话,干脆直接界面用WPF或SilverLight吧,跨平台也支持硬件加速,支持XAML、CSS什么的…… 

(3)这样的东西不必定大的,好比Render方式是可插拔的,根据不一样的状况加载不一样Render Engine就行了。
脚本支持通常是JavaScript,也是插件的方式,能够打开或关闭,能够考虑用Chrome的V8或是SpiderMonkey, Windows平台上也能够直接用MS IActiveScript.
跨平台很重要,能够在嵌入式里使用,因此Render通常能够用OpenGL,这样MAC什么的都支持。

虽然说工程比较庞大,编译出的东西其实不必定大的。就像WPF,若是脱离.Net,其实也就几个DLL。 

(4)WPF和DirectUI确实一模一样啊!:区别也有些:
就是DirectUI能够是GDI的,也能够是GDI+的。 而WPF本质是GDI+的【底层可能也用到硬件加速】,

另外不一样的是WPF的抽象更好,并且WPF/Silverlight更为轻量【固然了,排除掉.Net的部署的考虑】

大多数C++的DirectUI停留在XML配置静态UI,而后C++来实现后台逻辑。
而WPF更近一步,XAML除了配置UI,也能够指定必定的动画。

大多数的C++的一个Xml就是一个完整的UI,不能嵌套,缺少重用性。
而WPF的XAML能够有更好的模块化,能够经过网络Laz-Loading。
----------------------------------------------------------------------------------------

固然了。。。真正写软件的时候,WPF就靠边站了。。。
QQ是C++DirectUI的,360安全桌面,软件管家是C++DirectUI的,金山不少产品也是C++DirectUI的【并且开源了,有人把它的UI抽出来了】

Qt的QML本质也算是C++DirectUI的。

可是问题是如今C++DirectUI的方式会愈来愈少了。。。
------------------------------------------------------------------------------------------

Win8会更多支持HTML5,估计WPF也会被支持的很好。
iOS/MAC OS X人家无所谓,UI老是那么简单弱智,没有什么换肤的需求【我不多看到哪一个Mac的程序还支持换肤,并且Mac的程序感受UI都很简单。】 

-------------------------------------------------------------------------------
我本身也在作DirectUI,是基于WTL的,而不是基于MFC的。感受WTL的消息映射宏很帅! 

(5)目前开源的duilib就支持动态添加控件啊,插入一段Xml控件描述便可生成相应控件,毫不是静态UI
基于gdi的directUI更适合移植 

(6)讨论DirectUI已经没有意思了,这个玩意儿已经被炒烂了,自绘而已,加上一点消息处理,没东西了。

XML描述UI更是噱头,一种配置格式而已,跟INI、对话框模板没有本质区别。再高级再动态的XML描述也摆脱不了须要指定控件位置大小的局限。惟一不需指定控件位置且全自动布局的只有HTML。

脚本就不要强求了,只是一个更具灵活性的扩展方式而已。若是在体系结构上不能整理出完整统一的对象模型,还不如不要脚本,要否则脚本编写者会不停抱怨这个功能没有、那个功能没有,底层更新代码都得累死。

硬件加速的渲染,若是没有足够的积累,仍是不要轻易去碰,这是找罪受,不光是门槛过高的缘由,个中滋味本身试试就知道了。这句是我最大的忠告。

动画,有一点点就能够了,没有太呆板,多了伤眼睛,我如今很烦浏览器中铺天盖地的FLASH动画。这是UI和游戏的最大区别,游戏没动画就无法玩了。好在动画门槛不高,搞点小特效还算比较容易。作个通用动画也不算太难,WPF中的通用动画技术仍是很值得借鉴的,由于人家总结得很是好。

跨平台,见仁见智吧,我以为本身没有多少发言权。定好目标客户再决定要不要跨平台。跨平台的难度不在于多平台编码经验,而是设计水平。

一家之言,我也是搞UI库的,上面的全部技术我都尝试过。不过惋惜,没定好用户群,有严重的方向性错误。 

(7)网上有开原的DUILib,核心的消息分发代码是相似的,你能够直接参考他的学习。 

(8)如今看来WPF是最优秀的DirectUI, 他底层应该是基于D3D的。
配置的XML能处理一些简单的逻辑和动画配置,都是否是太难。
QT没怎么用过,我的以为它在Windows上的跨平台应该仍是基于窗口的。
C++方式的DirectUI,我的以为在嵌入式应该有普遍应用,在Windows上的话界面和性能要求都比较高的时候仍是有竞争力的,固然前提是这套DirectUI基于D3D。 

(9)多谢忠告,我的以为跨平台是DirectUI的优点,在windows和Mac上它或许没多少竞争优点,可是在嵌入式和手机平台开发上,DirectUI仍是颇有价值的。另外WPF的设计思想对于设计一套优秀的DirectUI Library 仍是颇有借鉴意义的。 

(10)你说得对,3D的玩意儿在嵌入式可能更有市场,这也是我努力的目标。为嵌入式设备定制大量的3D特效,也不须要为PC的那些懒用户制做UI设计器了,在桌面市场作3D-UI感受有点吃力不讨好。 

(11)我在WinCE中使用DirectUI, PC机下确实意义不大,嵌入式的却比较好. 

(12)界面的核心永远在于布局,审美,而不在于技术,DUI已经没嚼头了。

相关文章
相关标签/搜索