谈谈关于UI的设计布局及我想呕吐的
2010-04-21 18:57
323 查看
现在比较流行DirectUI设计思想,即采用windowless方式用api或gdi实现ui的绘制,其中还是有些好的设计思想值得借鉴,网上也有很多类似的讨论。
其实我觉得,像TX、Baidu这些企业软件,以及哪些个人开发比较成熟(商业化)的UI Library,大部分都是有一套自己的设计构架,但是All roads lead to Rome,在我看来,最基本的DirectUI构架无非就是:
DirectUI = Layout Manager + ReDraw + Message Response
首先,要实现一个好的DirectUI,必须设计出一套逻辑性、可编程性及可扩展性非常强的层布局器(Layout Manager ),为什么这样说呢?
因为DirectUI的核心设计思想就是界面自绘,既然很多控件都要用自绘的形式表现在界面上,那么控件与控件之间,一定存在某些逻辑布局上的依赖关系,我们可以把一个app分解成3D构架,横向为X,纵向为Y,内外为Z,那么好了,A控件跟B控件的X、Y相同,但是我要实现成B为A打底,成为A的背景(当然A会绘制成透明背景模式),那么A与B之间只存在Z的关系,即层次性。由此可以看出,一个好的Layout Manager是DirectUI绘制必不可少的关键点,可以将UI所要表达的所有控件(windowless,全部需要绘制出来的)层次分明的一一展现。(题外话:你可以通过任何手段将控件的逻辑位置等信息解析到LM中)
其次,ReDraw,第一点我已经阐明了控件之间层的关系,接下来自然是要通过LM(Layout Manager)将控件一一表现到界面上。如果在你的项目中木有LM,那么你就惨了,你无法判断应该用什么顺序依次往你的程序界面上绘制控件:(,就像一张空白的画纸,而你想往上面画很多漂亮的猫猫狗狗,那究竟是先画猫还是先画狗呢。。。打住,通过LM,你完全很清楚先画什么后画什么,LM设计的时候可以要求传入控件要有父控件节点,哦可!那么在ReDraw的时候,先遍历LM,绘制父节点,再绘制子节点,这样一来,界面就基本具有逻辑雏形了。
最后,该绘制的控件已经都绘制出来了,剩下唯一需要你实现的就是如何响应用户对这些控件的操作,这个应该不用多说了,无非就是捕获用户当前LButtonDone/LButtonUp等鼠标Click事件及rect,然后根据LM反馈出属于那种控件,以及该控件对应的事件即可。
啰嗦一大堆,不知道各位看官有没有对DirectUI实现的背后有所了解呢?
希望以后会有更多优秀的DirectUI软件问世,其实这也算是MS的轻量级WPF的一种吧?对于像我们这种吃VC++这饭的,说实话还是比较嫉妒混.Net的,谁叫VC不是MS亲儿子呢。。。
如果了解了上面的废话,那么你会对“DirectUI必须用XML解析”之类的误导newbie的话语产生呕吐作用,谁说DirectUI不能用TXT解析呢^o^
我就是不用任何file做解析又如何呢?你咬我?!
本文原文发表于:
http://bbs.csmod.com/thread-294-1-2.html
其实我觉得,像TX、Baidu这些企业软件,以及哪些个人开发比较成熟(商业化)的UI Library,大部分都是有一套自己的设计构架,但是All roads lead to Rome,在我看来,最基本的DirectUI构架无非就是:
DirectUI = Layout Manager + ReDraw + Message Response
首先,要实现一个好的DirectUI,必须设计出一套逻辑性、可编程性及可扩展性非常强的层布局器(Layout Manager ),为什么这样说呢?
因为DirectUI的核心设计思想就是界面自绘,既然很多控件都要用自绘的形式表现在界面上,那么控件与控件之间,一定存在某些逻辑布局上的依赖关系,我们可以把一个app分解成3D构架,横向为X,纵向为Y,内外为Z,那么好了,A控件跟B控件的X、Y相同,但是我要实现成B为A打底,成为A的背景(当然A会绘制成透明背景模式),那么A与B之间只存在Z的关系,即层次性。由此可以看出,一个好的Layout Manager是DirectUI绘制必不可少的关键点,可以将UI所要表达的所有控件(windowless,全部需要绘制出来的)层次分明的一一展现。(题外话:你可以通过任何手段将控件的逻辑位置等信息解析到LM中)
其次,ReDraw,第一点我已经阐明了控件之间层的关系,接下来自然是要通过LM(Layout Manager)将控件一一表现到界面上。如果在你的项目中木有LM,那么你就惨了,你无法判断应该用什么顺序依次往你的程序界面上绘制控件:(,就像一张空白的画纸,而你想往上面画很多漂亮的猫猫狗狗,那究竟是先画猫还是先画狗呢。。。打住,通过LM,你完全很清楚先画什么后画什么,LM设计的时候可以要求传入控件要有父控件节点,哦可!那么在ReDraw的时候,先遍历LM,绘制父节点,再绘制子节点,这样一来,界面就基本具有逻辑雏形了。
最后,该绘制的控件已经都绘制出来了,剩下唯一需要你实现的就是如何响应用户对这些控件的操作,这个应该不用多说了,无非就是捕获用户当前LButtonDone/LButtonUp等鼠标Click事件及rect,然后根据LM反馈出属于那种控件,以及该控件对应的事件即可。
啰嗦一大堆,不知道各位看官有没有对DirectUI实现的背后有所了解呢?
希望以后会有更多优秀的DirectUI软件问世,其实这也算是MS的轻量级WPF的一种吧?对于像我们这种吃VC++这饭的,说实话还是比较嫉妒混.Net的,谁叫VC不是MS亲儿子呢。。。
如果了解了上面的废话,那么你会对“DirectUI必须用XML解析”之类的误导newbie的话语产生呕吐作用,谁说DirectUI不能用TXT解析呢^o^
我就是不用任何file做解析又如何呢?你咬我?!
本文原文发表于:
http://bbs.csmod.com/thread-294-1-2.html
相关文章推荐
- 谈谈关于UI的设计布局
- AndroidUI设计之 布局管理器 - 详细解析布局实现
- AndroidUI设计之 布局管理器 - 详细解析布局实现
- 合理的布局,绚丽的样式,谈谈Winform程序的界面设计
- WPF界面设计技巧(9)—使用UI自动化布局
- 合理的布局,绚丽的样式,谈谈Winform程序的界面设计
- iOS UI设计---九宫格布局算法
- 基础知识--UI布局设计
- android UI设计,android ui开发,android 页面设计,android页面布局
- 合理的布局,绚丽的样式,谈谈Winform程序的界面设计
- Apple Watch人机交互指南:UI设计基础--模态页面和布局
- QtQuick桌面应用开发指导 1)关于教程 2)原型和设计 3)实现UI和功能_A
- 第十章 设计用户界面 之 构建UI布局
- 【Android】UI设计之界面布局
- 关于 Android(Eclipse)的Graphical Layout窗口无法正常显示布局设计
- Android-UI详解:软键盘弹出后,动态改变UI布局(IM聊天窗口设计示例)
- 【安卓开发】UI设计基础5:用约束布局 ConstraintLayout实现计算器UI
- 关于UI设计设计的颜色位数、UI缩放、透明的说明
- 合理的布局,绚丽的样式,谈谈Winform程序的界面设计
- (转)iOS7界面设计规范(4) - UI基础 - 布局