转自http://bbs.csdn.net/topics/350023031javascript
一.介绍
DirectUI技术说白了就是XML配置文件+图片+JavaScript控制界面。这点与网页css+图片+JavaScript十分类似,就是如开发网页通常开发桌面程序界面,这个开发效率固然大大的提升。将程序员从繁琐的界面绘制工做中解脱出来,专心开发逻辑代码。还能大大减小代码量,由于据统计,传统MFC程序中,界面代码大约占总代码的1/3强!也就是说,这个1/3的代码均可以由xml+javascript替代!
同理,若是网页开发时,每一个图片都须要由web程序绘制,你能想象一个网页的代码量有多少吗?
简直不能想象,而传统Window程序就是如此!
DirectUI技术最先被用于window xp资源管理器左边栏,被称为task folder.而DirectUI被广为国人所知,还得感谢腾讯公司。QQ2009的界面就是使用DirectUI技术开发的。相似的有微软的MSN,OCS和百度Hi。最近的Office2007 Ribbon界面,若是使用Spy++查看,能够见到一个名为"NetUI"的窗口,其实这也是微软内部DirectUI的一个变种。不过不管是微软,腾讯,仍是百度,都使用了DirectUI技术来开发本身的软件界面,却不愿将其公开。本文将介绍如何使用DirectUI技术开发一个相似QQ的界面演示程序。
二.背景
与DirectUI最类似的要数微软最近推出的WPF,其设计思想是相同的。只不过WPF只能运行于托管环境下。window下的C++程序员一直呼吁微软推出native WPF,也就是非托管的WPF。不过微软给出的答案是:NO。因此WPF将定位于为.NET战略服务。使用WPF开发的界面程序,必须带上庞大的.NET运行环境。不过随着Window 7的普及,这个情况会有所改变(window 7继承了.NET环境)。
不过,我想,若是许多公司的产品都是须要支持Window XP(最少QQ如今仍是支持Window 2000),因此WPF不是桌面应用程序界面开发的首选。
三.实现
废话很少说,先看演示程序的图片,足够以假乱真吧?!图片呢?不知道呀,转的时候就没有
在xml文件中也引入了网页中样式(style)的概念,style控制着网页中一个元素的外观。同理,directui xml文件中的样式(style)控制着一个控件的外观。一样的一个button,使用了不一样的style,外观也不同。以下面的代码及图片所示。
参照网页开发中的JavaScript,DirectUI JavaScript能够控制控件的状态、文本、显示/隐藏、位置等等属性。DirectUI JavaScript是基于事件,好比在button1点击事件中,改变button2的文本。或者button1点击事件以后,button1就要禁用。像这样的需求,在界面开发中是比较常见的。
在c++代码中,剩余的只是界面与程序逻辑的借口。好比,QQ2009中从服务器接收添加用户的通知,而后操做界面将此用户显示出来。如此看来,c++代码中彻底没有了绘制界面的代码。
四.后话
DirectUI是个好技术,只是微软不肯将其公开,其中最大的缘由是与它的.NET战略冲突。而由DirectUI技术演变而来的WPF只适用于托管环境。不过,仍是有几个公司或者我的开发了本身的DirectUI界面库。我知道的,有:
DirectUI.com // 公司开发的。竟然连试用版也没有,要付了钱才给你用。
Bodsoft DirectUI // 公司开发的。有试用版。设计工具不是太强大,还凑合。
UIEasy DirectUI // 我的开发的,比较简单。没设计工具。css
看文章什么的时候必定要看评论哟,,,java
评论什么都是精华c++
几乎90%介绍DirectUI的人,都抓不住重点:像界面和逻辑分开、用XML来配置界面,都和DirectUI没有半点关系。
具体来讲:只要界面是用文件来配置,都是界面和逻辑分开,VC的用的是*.rc文件,WPF用的是*.xaml文件、LibUIDK用的是*.ui文件。难道VC的对话框程序就不是界面和逻辑分开吗?难道必须用xml文件吗?
DirectUI仅仅是又实现了一遍微软已经成熟的控件,这样作有个好处:不受制于微软相关控件的约束。好比要作一个List控件,它的某些Item也须要用List来表达。若是是用CListCtrl,那么有两种办法:在CListCtrl中再建立几个CListCtrl,用来表示Item。但这有些弊端:一个窗口内子窗口的数量有限、使CListCtrl过于庞大,影响性能。还有一种方法就是,本身写一个相似于List的东东,来看成Item。这个实现上就有点接近DirecutUI了。若是本身写的这个List不但能够做为Item,还能够做为父控件,那它就是一个DirecutUI的控件了。
因为不受限于微软的不少约束,因此自由发挥的余地比较大。但发挥到什么程序,还要看各厂家的实力。因此不是说用DirectUI就必定能够开发QQ、MSN相似的界面,也不是说不用DirectUI就不能开发这样的界面。它们也是没有任何关系的。
固然,什么东东都是有利有弊的。当你抛弃微软,本身开发控件时,有多大的机率能比微软开发的强?有微软的稳定?有微软的兼容性好?还有一个问题是:因为这些控件都是各厂家本身开发的,那么原来mfc程序员须要对这些新的控件进行从新学习。有多少人愿意学习一种不通用的技术?
DirectUI还有一个好处:让本身的界面变得不标准。这要带来的直接好处是:增长Hack成本。好比想截获QQ的密码,若是是标准程序,正常状况下,把一个dll注入到QQ进程,而后拿到Edit的窗口句柄,就能够获得*号密码。如今用了DirectUI的edit,那么就没有句柄,也不支持标准CEdit的接口,就不能经过常规方法获得密码。让界面变得不标准,也是有利有弊的。若是本身的软件,但愿第三方厂家为本身开发插件,那就最好不要用DirectUI。程序员