关于DirectUI的一些思考

1. DirectUI的发展历史

对于传统Win32界面编程来讲,微软提供一整套界面标准,比如窗口、按钮、滚动条、列表等。对于每一个窗口(控件也是一个窗口),其能响应的消息和行为都有规范(通过API提供给开发者)。微软这套界面标准是为通用场景下提出的解决方案,能够满足绝大部分需求,但业务场景的多样性,使得开发者们并不满足于这套界面标准。

  • 2005年6月,Bjarke Viksoe发布了一篇文章UI: Become windowless, 阐述了无窗口句柄(windowless)思想。
  • 2010年12月,金山网络宣布启动金山卫士开源计划,该开源项目以失败告终,但有热心的网友从该项目中分离了金山卫士的界面部分成为一个独立的项目bkwin
  • 2012年之后,由bkwin项目衍生出各种基于DirectUI思想的开源框架,如DuilibDuiEngineDuiVisionSOUI等。

2. 什么是DirectUI

DirectUI是一种界面开发思想。其核心思想是指将所有的界面控件都绘制在一个窗口上,这些控件的逻辑和绘制方式都必须自己进行编写和封装,而不是使用Windows的原生控件,所以这些控件都是无句柄的(Windowsless)

那这个名称是怎么来的呢?由于Windows有句柄窗口是一套工业标准,窗口消息和API都是公开的,所有人都知道怎么操作窗口。微软在做MSN的时候为了保护用户隐私,搞了一个DirectUIHWND,后边DirectUI这个名字就被沿用下来,后边说的DirectUI一般都是指无句柄窗口

3. DirectUI需要解决的问题

DirectUI实际是在Windows的原生窗口基础上,更细粒度地进行窗口控制,它需要建立一套自己DirectUI标准,主要需要解决以下问题:

  • 窗口子类化,截获窗口消息;
  • 封装自己的控件,并将控件绘制到窗口上;
  • 封装窗口消息,并分发到自己的控件上,让自己的控件根据消息进行相应绘制;
  • 根据不同行为发送自己定义消息给窗口,以便客户程序处理;
  • 界面与逻辑分离,一般使用XML来描述窗口上控件布局;

4. DirectUI的优势

相较于传统Win32界面,DirectUI技术有以下优势:

  • 界面逻辑完全分离:DirectUI将界面布局完全分离出来(通常采用XML进行描述),将逻辑与界面解耦,符合界面设计原则。
  • 防止软件被破解:由于DirectUI是建立在Win32界面标准之上,其DUI窗口(子控件也是一个DUI窗口)的消息转发和消息处理因框架设计的不同而异,这些内部逻辑对外不透明,很难破解。我想这也是很多大厂不想开源其界面框架的原因之一吧。
  • 运行效率更高:这个取决于DirectUI框架的实现。由于是在框架内部进行消息转发和处理,并不需要经过系统,理论上效率会更高。
  • 更容易实现绚丽效果和换肤功能:DirectUI框架提供标准控件的同时也提供良好的扩展性。业务层在框架基本上可以很容易定制自己的控件。

5. DirectUI框架

对于互联网桌面端产品,目前大部分还是使用的DirectUI,对于大公司而言,都有一套自己的界面框架,如腾讯、360。但这些公司并没有把这些界面框架开源出来。不过迅雷开源自己的界面引擎bolt
另外也有一些个人开发者维护的比较优秀的开源界面库,在众多开源库中,比较活跃的还是SOUI,具体请参考SOUI界面库作者的博客

6. 从另一个角度看DirectUI

UI承载着跟用户交互的职能。从早期二进制打孔到命令行到现在的窗口可视化,其本质是降低使用计算机的门槛,提高使用计算机的效率。而从UI发展来看,DirectUI只是在有句柄的窗口上进行更细粒度的控制;再往上抽象来看,Windows系统制定窗口标准,实际上是对显存更细粒度的控制;不管是有句柄窗口还是无句柄窗口,其目的无非是提高计算机跟用户的交互能力和开发效率。从这一点来看,DirectUI在交互能力和开发效率上都有所提高,但其本质没有任何变化。从开发效率来看,它肯定比不上WPF;从交互能力来讲,传统的UI交互有被语音交互取代的趋势。

7. 更多参考

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,565评论 25 707
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    X先生_未知数的X阅读 15,937评论 3 118
  • 做人要有,良心❤,爱心❤,孝心❤,感恩的心❤,做到四心❤人这辈子就知足了也成就了。
    我_1aee阅读 279评论 0 0
  • 工具世界的规律,不知所措地沉迷,漫不经心地遗忘。
    周淡皮阅读 82评论 0 0